Redis具体解释

2、 redis.windows.conf各项配置參数介绍

默认情况下,redis不是在后台模式执行的,假设须要在后台进程执行。把该项的值更改为yes。默觉得no

daemonize:是否以后台daemon方式执行

如redis服务以后台进程执行的时候,Redis默认会把pid写入/run/redis.pid文件组,你能够配置到其它文件路径。

当执行多个redis服务时,须要指定不同的pid文件和port

pidfile:pid文件位置

指定redis监听port,默觉得6379

假设port设置为0,Redis就不会监听TCP套接字。

port:监听的端口号

指定redis仅仅接收来自于该IP地址的请求,假设不进行设置,默认将处理全部请求,

在生产环境中最好设置该项

bind 127.0.0.1

设置client连接时的超时时间,单位为秒。当client在这段时间内没有发出不论什么指令,那么关闭该连接

默认值:0代表禁用,永不关闭

timeout:请求超时时间

指定用来监听连接的unxi套接字的路径。这个没有默认值,所以假设不指定的话,Redis就不会通过unix套接字来监听。

unixsocket /tmp/redis.sock

unixsocketperm 755

指定日志记录级别

Redis总共支持四个级别:debug、verbose、notice、warning,默觉得verbose

debug 记录非常多信息,用于开发和測试

varbose 非常多精简的实用信息。不像debug会记录那么多

notice 普通的verbose。经常使用于生产环境

warning 仅仅有很重要或者严重的信息会记录到日志

loglevel:log信息级别

配置log文件名和全路径地址

默认值为stdout,使用”标准输出”。默认后台模式会输出到/dev/null

logfile:log文件位置

可用数据库数,默认值为16。默认数据库存储在DB 0号ID库中,无特殊需求,建议仅设置一个数据库 databases 1

查询数据库使用 SELECT

dbid介于 0 到 ‘databases’-1 之间

databases:开启数据库的数量

save * :保存快照的频率。第一个表示多长时间。第三个*表示运行多少次写操作。在一定时间内运行一定数量的写操作时。自己主动保存快照。可设置多个条件。

rdbcompression:是否使用压缩

dbfilename:数据快照文件名称(仅仅是文件名称,不包含文件夹)

dir:数据快照的保存文件夹(这个是文件夹)

appendonly:是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率。

appendfsync:appendonlylog怎样同步到磁盘(三个选项,各自是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统自己同步)

#### REPLICATION 同步

主从同步。通过 slaveof 配置来实现Redis实例的备份。

注意,这里是本地从远端复制数据。也就是说,本地能够有不同的数据库文件、绑定不同的IP、监听不同的port。

当本机为从服务时。设置主服务的IP及port,在Redis启动时,它会自己主动从主服务进行数据同步

slaveof

假设主服务master设置了password(通过以下的 “requirepass” 选项来配置),slave服务连接master的password,那么slave在開始同步之前必须进行身份验证,否则它的同步请求会被拒绝。

当本机为从服务时,设置主服务的连接password

masterauth

当一个slave失去和master的连接,或者同步正在进行中。slave的行为有两种可能:

1) 假设 slave-serve-stale-data 设置为 “yes” (默认值),slave会继续响应client请求,可能是正常数据。也可能是还没获得值的空数据。

2) 假设 slave-serve-stale-data 设置为 “no”,slave会回复”正在从master同步(SYNC with master in progress)”来处理各种请求,除了 INFO 和 SLAVEOF 命令。

slave-serve-stale-data yes

slave依据指定的时间间隔向server发送ping请求。

时间间隔能够通过 repl_ping_slave_period 来设置。

默认10秒

repl-ping-slave-period 10

以下的选项设置了大块数据I/O、向master请求数据和ping响应的过期时间。

默认值60秒。

一个非常重要的事情是:确保这个值比 repl-ping-slave-period 大。否则master和slave之间的传输过期时间比预想的要短。

repl-timeout 60

#### SECURITY 安全

要求client在处理不论什么命令时都要验证身份和设置password。

假设你不相信请求者,这个功能非常实用。

为了向后兼容的话,这段应该凝视掉。并且大多数人不须要身份验证(比如:它们执行在自己的server上。)

警告:外部使用者能够每秒尝试150k的password来试图破解password。这意味着你须要一个高强度的password。否则破解太easy了。

设置连接password

requirepass foobared

命令重命名,可设置多个

在共享环境下。能够为危急命令改变名字。比方。你能够为 CONFIG 改个其它不太easy猜到的名字,这样你自己仍然能够使用。而别人却没法知道它。

比如:

rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52

rename-command info info_biran

rename-command set set_biran

甚至也能够通过给命令赋值一个空字符串来全然禁用这条命令:

rename-command CONFIG “”

#### LIMITS 限制

设置最大同一时候连接client数量。

默认没有限制,这个关系到Redis进程可以打开的文件描写叙述符数量。

特殊值”0″表示没有限制。

一旦达到这个限制,Redis会关闭全部新连接并发送错误”达到最大用户数上限(max number of clients reached)”

maxclients 128

不要用比设置的上限很多其它的内存。

一旦内存使用达到上限,Redis会依据选定的回收策略(參见:maxmemmory-policy:内存策略设置)删除key。

假设由于删除策略问题Redis无法删除key,或者策略设置为 “noeviction”,Redis会回复须要很多其它内存的错误信息给命令。

比如,SET,LPUSH等等。可是会继续合理响应仅仅读命令,比方:GET。

在使用Redis作为LRU缓存,或者为实例设置了硬性内存限制的时候(使用 “noeviction” 策略)的时候,这个选项还是满实用的。

警告:当一堆slave连上达到内存上限的实例的时候,响应slave须要的输出缓存所需内存不计算在使用内存其中。

这样当请求一个删除掉的key的时候就不会触发网络问题/又一次同步的事件,然后slave就会收到一堆删除指令,直到数据库空了为止。

简而言之,假设你有slave连上一个master的话,那建议你把master内存限制设小点儿,确保有足够的系统内存用作输出缓存。

(假设策略设置为”noeviction”的话就不无所谓了)

设置最大内存。达到最大内存设置后。Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,任到达最大内存设置,将无法再进行写入操作。

maxmemory 256000000分配256M内存

maxmemory

内存策略:假设达到内存限制了。Redis怎样删除key。

你能够在以下五个策略里面选:

volatile-lru -> 依据LRU算法生成的过期时间来删除。

allkeys-lru -> 依据LRU算法删除不论什么key。

volatile-random -> 依据过期设置来随机删除key。

allkeys->random -> 无区别随机删。

volatile-ttl -> 依据近期过期时间来删除(辅以TTL)

noeviction -> 谁也不删,直接在写操作时返回错误。

注意:对全部策略来说。假设Redis找不到合适的能够删除的key都会在写操作时返回一个错误。

这里涉及的命令:set setnx setex append

incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd

sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby

zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby

getset mset msetnx exec sort

默认值例如以下:

maxmemory-policy volatile-lru

LRU和最小TTL算法的实现都不是非常精确,可是非常接近(为了省内存),所以你能够用例子做測试。

比如:默认Redis会检查三个key然后取最旧的那个。你能够通过以下的配置项来设置样本的个数。

maxmemory-samples 3

#### APPEND ONLY MODE 纯累加模式

默认情况下,Redis是异步的把数据导出到磁盘上。

假设不希望丢掉不论什么一条数据的话就该用纯累加模式:一旦开启这个模式,Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件。

每次启动时Redis都会把这个文件的数据读入内存里。

注意,异步导出的数据库文件和纯累加文件能够并存(此时须要把上面全部”save”设置都凝视掉。关掉导出机制)。

假设纯累加模式开启了,那么Redis会在启动时加载日志文件而忽略导出的 dump.rdb 文件。

重要:查看 BGREWRITEAOF 来了解当累加日志文件太大了之后,怎么在后台又一次处理这个日志文件。

设置:yes为纯累加模式

appendonly no

设置纯累加文件名称字及保存路径,默认:”appendonly.aof”

appendfilename appendonly.aof

fsync() 请求操作系统立即把数据写到磁盘上,不要再等了。

有些操作系统会真的把数据立即刷到磁盘上;有些则要磨蹭一下,可是会尽快去做。

Redis支持三种不同的模式:

no:不要立马刷。仅仅有在操作系统须要刷的时候再刷。

比較快。

always:每次写操作都立马写入到aof文件。慢,可是最安全。

everysec:每秒写一次。折衷方案。

默认的 “everysec” 通常来说能在速度和数据安全性之间取得比較好的平衡。

假设你真的理解了这个意味着什么,那么设置”no”能够获得更好的性能表现(假设丢数据的话。则仅仅能拿到一个不是非常新的快照);

或者相反的,你选择 “always” 来牺牲速度确保数据安全、完整。

假设不确定这些模式的使用,建议使用 “everysec”

appendfsync always

appendfsync everysec

appendfsync no

假设AOF的同步策略设置成 “always” 或者 “everysec”。那么后台的存储进程(后台存储或写入AOF日志)会产生非常多磁盘I/O开销。

某些Linux的配置下会使Redis由于 fsync() 而堵塞非常久。

注意。眼下对这个情况还没有完美修正,甚至不同线程的 fsync() 会堵塞我们的 write(2) 请求。

为了缓解这个问题,能够用以下这个选项。它能够在 BGSAVE 或 BGREWRITEAOF 处理时阻止 fsync()。

这就意味着假设有子进程在进行保存操作,那么Redis就处于”不可同步”的状态。

这实际上是说,在最差的情况下可能会丢掉30秒钟的日志数据。(默认Linux设定)

假设你有延迟的问题那就把这个设为 “yes”,否则就保持 “no”。这是保存持久数据的最安全的方式。

no-appendfsync-on-rewrite no

自己主动重写AOF文件

假设AOF日志文件大到指定百分比,Redis可以通过 BGREWRITEAOF 自己主动重写AOF日志文件。

工作原理:Redis记住上次重写时AOF日志的大小(或者重新启动后没有写操作的话。那就直接用此时的AOF文件),

基准尺寸和当前尺寸做比較。假设当前尺寸超过指定比例,就会触发重写操作。

你还须要指定被重写日志的最小尺寸。这样避免了达到约定百分比但尺寸仍然非常小的情况还要重写。

指定百分比为0会禁用AOF自己主动重写特性。

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

#### SLOW LOG 慢查询日志

Redis慢查询日志能够记录超过指定时间的查询。执行时间不包含各种I/O时间。

比如:连接client,发送响应数据等。

仅仅计算命令执行的实际时间(这是唯一一种命令执行线程堵塞而无法同一时候为其它请求服务的场景)

你能够为慢查询日志配置两个參数:一个是超标时间。单位为微妙,记录超过个时间的命令。

还有一个是慢查询日志长度。当一个新的命令被写进日志的时候。最老的那个记录会被删掉。

以下的时间单位是微秒,所以1000000就是1秒。注意,负数时间会禁用慢查询日志。而0则会强制记录全部命令。

slowlog-log-slower-than 10000

这个长度没有限制。仅仅要有足够的内存即可。

你能够通过 SLOWLOG RESET 来释放内存。

slowlog-max-len 128

#### VIRTUAL MEMORY 虚拟内存

警告!虚拟内存在Redis 2.4是反对的,因性能问题。2.4版本号 VM机制彻底废弃,不建议使用此配置!

!!!!

。。。!!

虚拟内存能够使Redis在内存不够的情况下仍然能够将全部数据序列保存在内存里。

为了做到这一点,高频key会调到内存里,而低频key会转到交换文件中,就像操作系统使用内存页一样。

要使用虚拟内存,仅仅要把 “vm-enabled” 设置为 “yes”,并依据须要设置以下三个虚拟内存參数就能够了。

vm-enabled no

这是交换文件的路径。

预计你猜到了。交换文件不能在多个Redis实例之间共享,所以确保每一个Redis实例使用一个独立交换文件。

最好的保存交换文件(被随机訪问)的介质是固态硬盘(SSD)。

警告 假设你使用共享主机。那么默认的交换文件放到 /tmp 下是不安全的。

创建一个Redis用户可写的文件夹。并配置Redis在这里创建交换文件。

vm-swap-file /tmp/redis.swap

“vm-max-memory” 配置虚拟内存可用的最大内存容量。

假设交换文件还有空间的话,全部超标部分都会放到交换文件中。

“vm-max-memory” 设置为0表示系统会用掉全部可用内存,建议设置为剩余内存的60%-80%。

将全部大于vm-max-memory的数据存入虚拟内存,不管vm-max-memory设置多小,全部索引数据都是内存存储的(Redis的索引数据就是keys),也就是说,当vm-max-memory设置为0的时候,事实上是全部value都存在于磁盘。默认值为0。

vm-max-memory 0

Redis交换文件是分成多个数据页的。

一个可存储对象能够被保存在多个连续页里。可是一个数据页无法被多个对象共享。

所以。假设你的数据页太大,那么小对象就会浪费掉非常多空间。

假设数据页太小,那用于存储的交换空间就会更少(假定你设置同样的数据页数量)

假设你使用非常多小对象,建议分页尺寸为64或32个字节。

假设你使用非常多大对象,那就用大一些的尺寸。

假设不确定。那就用默认值 :)

vm-page-size 32

交换文件中数据页总数。

依据内存中分页表(已用/未用的数据页分布情况),磁盘上每8个数据页会消耗内存里1个字节。

交换区容量 = vm-page-size * vm-pages

依据默认的32字节的数据页尺寸和134217728的数据页数来算,Redis的数据页文件会占4GB,而内存里的分页表会消耗16MB内存。

为你的应验程序设置最小且够用的数字比較好。以下这个默认值在大多数情况下都是偏大的。

vm-pages 134217728

同一时候可执行的虚拟内存I/O线程数。即訪问swap文件的线程数。

这些线程能够完毕从交换文件进行数据读写的操作。也能够处理数据在内存与磁盘间的交互和编码/解码处理。

多一些线程能够一定程度上提高处理效率,尽管I/O操作本身依赖于物理设备的限制。不会由于很多其它的线程而提高单次读写操作的效率。

特殊值0会关闭线程级I/O。并会开启堵塞虚拟内存机制。

设置最好不要超过机器的核数,假设设置为0,那么全部对swap文件的操作都是串行的.可能会造成比較长时间的延迟,可是对数据完整性有非常好的保证.

vm-max-threads 4

#### ADVANCED CONFIG 高级配置

当有大量数据时。适合用哈希编码(这会须要很多其它的内存)。元素数量上限不能超过给定限制。

Redis Hash是value内部为一个HashMap。假设该Map的成员数比較少,则会採用类似一维线性的紧凑格式来存储该Map, 即省去了大量指针的内存开销,例如以下2个条件随意一个条件超过设置值都会转换成真正的HashMap,

当value这个Map内部不超过多少个成员时会採用线性紧凑格式存储,默认是64,即value内部有64个下面的成员就是使用线性紧凑存储,超过该值自己主动转成真正的HashMap。

hash-max-zipmap-entries 512

当 value这个Map内部的每一个成员值长度不超过多少字节就会採用线性紧凑存储来节省空间。

hash-max-zipmap-value 64

与hash-max-zipmap-entries哈希相类似,数据元素较少的情况下,能够用还有一种方式来编码从而节省大量空间。

list数据类型多少节点下面会採用去指针的紧凑存储格式

list-max-ziplist-entries 512

list数据类型节点值大小小于多少字节会採用紧凑存储格式

list-max-ziplist-value 64

还有这样一种特殊编码的情况:数据全是64位无符号整型数字构成的字符串。

以下这个配置项就是用来限制这样的情况下使用这样的编码的最大上限的。

set-max-intset-entries 512

与第一、另外一种情况相似,有序序列也能够用一种特别的编码方式来处理,可节省大量空间。

这样的编码仅仅适合长度和元素都符合以下限制的有序序列:

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

哈希刷新,每100个CPU毫秒会拿出1个毫秒来刷新Redis的主哈希表(顶级键值映射表)。

redis所用的哈希表实现(见dict.c)採用延迟哈希刷新机制:你对一个哈希表操作越多,哈希刷新操作就越频繁;

反之,假设server很不活跃那么也就是用点内存保存哈希表而已。

默认是每秒钟进行10次哈希表刷新。用来刷新字典,然后尽快释放内存。

建议:

假设你对延迟比較在意的话就用 “activerehashing no”,每一个请求延迟2毫秒不太好嘛。

假设你不太在意延迟而希望尽快释放内存的话就设置 “activerehashing yes”。

activerehashing yes

#### INCLUDES 包括

包括一个或多个其它配置文件。

这在你有标准配置模板可是每一个redisserver又须要个性设置的时候非常实用。

包括文件特性同意你引人其它配置文件,所以好好利用吧。

include /path/to/local.conf

include /path/to/other.conf

改动配置后。假设配置文件涉及到中文内容记得将文件存为UTF-8编码。

Original: https://www.cnblogs.com/cxchanpin/p/7400967.html
Author: cxchanpin
Title: Redis具体解释

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/528882/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 防火墙NAT+DHCP+ACL+ACAP

    任务要求: SwitchA作为有线终端网关与DHCP Server,为无线终端与有线终端分配IP地址,并配置ACL访问控制列表控制不同用户的访问权限,客户机只能跟DMZ区域服务器互…

    Linux 2023年6月7日
    075
  • 华为云服务器数据库配置远程连接

    华为云服务器数据库配置远程连接 起因 暑期购买了华为云的一台服务器进行开发 在上面部署了MySQL数据库,由于app中修改用户信息存在未修复的bug,经常会出现登录密码为空,导致账…

    Linux 2023年6月13日
    0128
  • 配置git环境与项目创建

    主要用于记录上课笔记,方便以后复习 acgit的地址:https://git.acwing.com/wyw/kob1/ 1. 项目模块的包含 1.1 采用前后端分离 Web端大概框…

    Linux 2023年6月6日
    0112
  • CentOS——Redis远程连接可视化工具Rdis Desktop Manage

    前排提示 Centos没有安装Redis的可参考 https://www.cnblogs.com/tianhengblogs/p/15265028.html 一。 修改redis….

    Linux 2023年5月28日
    0161
  • redis高可用

    Redis-高可用(主从复制、哨兵模式、集群) 1.主从复制 1.1 主从复制简介 在 Redis 复制的基础上,使用和配置主从复制非常简单,能使得从 Redis 从服务器(下文称…

    Linux 2023年6月13日
    088
  • nginx源码层面探究request_time、upstream_response_time、upstream_connect_time与upstream_header_time指标具体含义与区别

    背景概述 最近计划着重分析一下线上各api的HTTP响应耗时情况,检查是否有接口平均耗时、99分位耗时等相关指标过大的情况,了解到nginx统计请求耗时有四个指标:request_…

    Linux 2023年6月6日
    098
  • 1s 创建100G文件,最快的方法是?

    在我们日常工作中,为了验证开发的功能,比如:文件上传功能或者算法的处理效率等,经常需要一些大文件进行测试,有时在四处找了一顿之后,发现竟然没有一个合适的,虽然 Linux 中也有一…

    Linux 2023年5月27日
    084
  • CTF简介

    最近在学习渗透测试,后来发现CTF很有趣,发现对学习有所帮助,于是找了几个网站,下面推荐几个我觉得不错的网站 https://www.ctfhub.com/#/index http…

    Linux 2023年6月7日
    091
  • BKT的胡测题解:第一套第三题base

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/Grharris/p/11550809.htmlAuth…

    Linux 2023年6月6日
    090
  • Linux安装管理

    Linux系列 包管理工具 单个软件包 管理工具 RedHat系列 Redhat Centos Fedora yum rpm .rpm Debian系列 Ubuntu apt-ge…

    Linux 2023年6月8日
    091
  • protobuf 的交叉编译使用(C++)

    为了提高通信效率,可以采用 protobuf 替代 XML 和 Json 数据交互格式,protobuf 相对来说数据量小,在进程间通信或者设备之间通信能够提高通信速率。下面介绍 …

    Linux 2023年6月7日
    0137
  • 辗转相除法:(求最大公约数)

    辗转相除法:(最大公约数)又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除…

    Linux 2023年6月7日
    0108
  • Linux 配置Git

    前言:请各大网友尊重本人原创知识分享,谨记本人博客: 南国以南i 一、用git –version命令检查是否已经安装 二、下载git源码并解压 wget https:/…

    Linux 2023年6月14日
    088
  • go将青龙面板里面的脚本文件都下载到本地

    纯粹练手用的,大家轻喷青龙面板的脚本文件可以下载到本地,这样的话自己可以研究一下对应的脚本文件,能学到更多的知识,原理其实很简单,F12一下就知道了,青龙面板使用Request H…

    Linux 2023年6月7日
    0126
  • 清空Redis集群所有节点的数据工具

    FLUSHALL和FLUSHDB是单机命令,所以清空集群需要在所有Master节点上均执行一次。下载:https://github.com/eyjian/redis-tools/b…

    Linux 2023年5月28日
    0102
  • Golang 实现 Redis(9): 使用GeoHash 搜索附近的人

    本文是使用 golang 实现 redis 系列的第九篇,主要介绍如何使用 GeoHash 实现搜索附近的人。 搜索附近的POI是一个非常常见的功能,它的技术难点在于地理位置是二维…

    Linux 2023年5月28日
    0110
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球