redis常用命令常见错误配置技巧等分享Word格式.docx
- 文档编号:21945124
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:13
- 大小:23.37KB
redis常用命令常见错误配置技巧等分享Word格式.docx
《redis常用命令常见错误配置技巧等分享Word格式.docx》由会员分享,可在线阅读,更多相关《redis常用命令常见错误配置技巧等分享Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
volatile-random->
根据过期设置来随机删除key。
allkeys->
random->
无差别随机删。
volatile-ttl->
根据最近过期时间来删除(辅以TTL)
noeviction->
谁也不删,直接在写操作时返回错误。
6.reids日志位置
logfile日志记录方式,默认值为stdout,如果设置为stdout且以守护进程方式运行,那么日志会被重定向到/dev/null,也就是不记日志。
7.reids配置参数详解
#daemonizeno
默认情况下,redis不是在后台运行的,如果需要在后台运行,把该项的值更改为yes
daemonizeyes
#
当redis在后台运行的时候,Redis默认会把pid文件放在/var/run/redis.pid,你可以配置到其他地址。
当运行多个redis服务时,需要指定不同的pid文件和端口
pidfile/var/run/redis_6379.pid
指定redis运行的端口,默认是6379
port6379
在高并发的环境中,为避免慢客户端的连接问题,需要设置一个高速后台日志
tcp-backlog511
指定redis只接收来自于该IP地址的请求,如果不进行设置,那么将处理所有请求
#bind192.168.1.10010.0.0.1
#bind127.0.0.1
设置客户端连接时的超时时间,单位为秒。
当客户端在这段时间内没有发出任何指令,那么关闭该连接
#0是关闭此设置
timeout0
#TCPkeepalive
在Linux上,指定值(秒)用于发送ACKs的时间。
注意关闭连接需要双倍的时间。
默认为0。
tcp-keepalive0
指定日志记录级别,生产环境推荐notice
#Redis总共支持四个级别:
debug、verbose、notice、warning,默认为verbose
#debug
记录很多信息,用于开发和测试
#varbose
有用的信息,不像debug会记录那么多
#notice
普通的verbose,常用于生产环境
#warning
只有非常重要或者严重的信息会记录到日志
loglevelnotice
配置log文件地址
默认值为stdout,标准输出,若后台模式会输出到/dev/null。
logfile/var/log/redis/redis.log
可用数据库数
默认值为16,默认数据库为0,数据库范围在0-(database-1)之间
databases16
################################快照#################################
保存数据到磁盘,格式如下:
save
指出在多长时间内,有多少次更新操作,就将数据同步到数据文件rdb。
相当于条件触发抓取快照,这个可以多个条件配合
比如默认配置文件中的设置,就设置了三个条件
save9001
900秒内至少有1个key被改变
save30010
300秒内至少有300个key被改变
save6010000
60秒内至少有10000个key被改变
#save9001
#save30010
#save6010000
后台存储错误停止写。
stop-writes-on-bgsave-erroryes
存储至本地数据库时(持久化到rdb文件)是否压缩数据,默认为yes
rdbcompressionyes
#RDB文件的是否直接偶像chcksum
rdbchecksumyes
本地持久化数据库文件名,默认值为dump.rdb
dbfilenamedump.rdb
工作目录
数据库镜像备份的文件放置的路径。
这里的路径跟文件名要分开配置是因为redis在进行备份时,先会将当前数据库的状态写入到一个临时文件中,等备份完成,
再把该该临时文件替换为上面所指定的文件,而这里的临时文件和上面所配置的备份文件都会放在这个指定的路径当中。
#AOF文件也会存放在这个目录下面
注意这里必须制定一个目录而不是文件
dir/var/lib/redis-server/
#################################复制#################################
主从复制.设置该数据库为其他数据库的从数据库.
设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步
#slaveof
当master服务设置了密码保护时(用requirepass制定的密码)
#slave服务连接master的密码
#masterauth
当从库同主机失去连接或者复制正在进行,从机库有两种运行方式:
#1)
如果slave-serve-stale-data设置为yes(默认设置),从库会继续响应客户端的请求
#2)
如果slave-serve-stale-data是指为no,出去INFO和SLAVOF命令之外的任何请求都会返回一个
错误"
SYNCwithmasterinprogress"
slave-serve-stale-datayes
配置slave实例是否接受写。
写slave对存储短暂数据(在同master数据同步后可以很容易地被删除)是有用的,但未配置的情况下,客户端写可能会发送问题。
从Redis2.6后,默认slave为read-only
slaveread-onlyyes
从库会按照一个时间间隔向主库发送PINGs.可以通过repl-ping-slave-period设置这个时间间隔,默认是10秒
#repl-ping-slave-period10
#repl-timeout
设置主库批量数据传输时间或者ping回复时间间隔,默认值是60秒
一定要确保repl-timeout大于repl-ping-slave-period
#repl-timeout60
在slavesocket的SYNC后禁用TCP_NODELAY
如果选择“yes”,Redis将使用一个较小的数字TCP数据包和更少的带宽将数据发送到slave,但是这可能导致数据发送到slave端会有延迟,如果是Linuxkernel的默认配置,会达到40毫秒.
如果选择"
no"
,则发送数据到slave端的延迟会降低,但将使用更多的带宽用于复制.
repl-disable-tcp-nodelayno
设置复制的后台日志大小。
复制的后台日志越大,slave断开连接及后来可能执行部分复制花的时间就越长。
后台日志在至少有一个slave连接时,仅仅分配一次。
#repl-backlog-size1mb
在master不再连接slave后,后台日志将被释放。
下面的配置定义从最后一个slave断开连接后需要释放的时间(秒)。
#0意味着从不释放后台日志
#repl-backlog-ttl3600
如果master不能再正常工作,那么会在多个slave中,选择优先值最小的一个slave提升为master,优先值为0表示不能提升为master。
slave-priority100
如果少于N个slave连接,且延迟时间<
=M秒,则master可配置停止接受写操作。
例如需要至少3个slave连接,且延迟<
=10秒的配置:
#min-slaves-to-write3
#min-slaves-max-lag10
设置0为禁用
默认min-slaves-to-write为0(禁用),min-slaves-max-lag为10
##################################安全###################################
设置客户端连接后进行任何其他指定前需要使用的密码。
警告:
因为redis速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行150K次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解
#requirepassfoobared
命令重命名.
在一个共享环境下可以重命名相对危险的命令。
比如把CONFIG重名为一个不容易猜测的字符。
举例:
#rename-commandCONFIGb840fc02d524045429941cc15f59e41cb7be6c52
如果想删除一个命令,直接把它重命名为一个空字符"
"
即可,如下:
#rename-commandCONFIG"
###################################约束###################################
#设置同一时间最大客户端连接数,默认无限制,
#Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,
#如果设置
maxclients0,表示不作限制。
#当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回maxnumberofclientsreached错误信息
#maxclients10000
指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会按照清除策略尝试清除已到期的Key
如果Redis依照策略清除后无法提供足够空间,或者策略设置为”noeviction”,则使用更多空间的命令将会报错,例如SET,LPUSH等。
但仍然可以进行读取操作
注意:
Redis新的vm机制,会把Key存放内存,Value会存放在swap区
该选项对LRU策略很有用。
#maxmemory的设置比较适合于把redis当作于类似memcached的缓存来使用,而不适合当做一个真实的DB。
当把Redis当做一个真实的数据库使用的时候,内存使用将是一个很大的开销
#maxmemory
当内存达到最大值的时候Redis会选择删除哪些数据?
有五种方式可供选择
#volatile-lru->
利用LRU算法移除设置过过期时间的key(LRU:
最近使用
LeastRecentlyUsed)
#allkeys-lru->
利用LRU算法移除任何key
#volatile-random->
移除设置过过期时间的随机key
#allkeys->
removearandomkey,anykey
#volatile-ttl->
移除即将过期的key(minorTTL)
#noeviction->
不移除任何可以,只是返回一个写错误
对于上面的策略,如果没有合适的key可以移除,当写的时候Redis会返回一个错误
默认是:
volatile-lru
#maxmemory-policyvolatile-lru
#LRU
和
minimalTTL算法都不是精准的算法,但是相对精确的算法(为了节省内存),随意你可以选择样本大小进行检测。
#Redis默认的灰选择3个样本进行检测,你可以通过maxmemory-samples进行设置
#maxmemory-samples3
##############################AOF###############################
默认情况下,redis会在后台异步的把数据库镜像备份到磁盘,但是该备份是非常耗时的,而且备份也不能很频繁,如果发生诸如拉闸限电、拔插头等状况,那么将造成比较大范围的数据丢失。
所以redis提供了另外一种更加高效的数据库备份及灾难恢复方式。
开启appendonly模式之后,redis会把所接收到的每一次写操作请求都追加到appendonly.aof文件中,当redis重新启动时,会从该文件恢复出之前的状态。
但是这样会造成appendonly.aof文件过大,所以redis还支持了BGREWRITEAOF指令,对appendonly.aof进行重新整理。
你可以同时开启asynchronousdumps和
AOF
appendonlyno
#AOF文件名称
(默认:
"
appendonly.aof"
)
#appendfilenameappendonly.aof
#Redis支持三种同步AOF文件的策略:
#no:
不进行同步,系统去操作
.Faster.
#always:
always表示每次有写操作都进行同步.Slow,Safest.
#everysec:
表示对写操作进行累积,每秒同步一次.Compromise.
默认是"
everysec"
,按照速度和安全折中这是最好的。
如果想让Redis能更高效的运行,你也可以设置为"
,让操作系统决定什么时候去执行
或者相反想让数据更安全你也可以设置为"
always"
如果不确定就用
.
#appendfsyncalways
appendfsynceverysec
#appendfsyncno
#AOF策略设置为always或者everysec时,后台处理进程(后台保存或者AOF日志重写)会执行大量的I/O操作
在某些Linux配置中会阻止过长的fsync()请求。
注意现在没有任何修复,即使fsync在另外一个线程进行处理
为了减缓这个问题,可以设置下面这个参数no-appendfsync-on-rewrite
no-appendfsync-on-rewriteno
#AOF
自动重写
当AOF文件增长到一定大小的时候Redis能够调用
BGREWRITEAOF
对日志文件进行重写
它是这样工作的:
Redis会记住上次进行些日志后文件的大小(如果从开机以来还没进行过重写,那日子大小在开机的时候确定)
基础大小会同现在的大小进行比较。
如果现在的大小比基础大小大制定的百分比,重写功能将启动
同时需要指定一个最小大小用于AOF重写,这个用于阻止即使文件很小但是增长幅度很大也去重写AOF文件的情况
设置
percentage为0就关闭这个特性
auto-aof-rewrite-percentage100
auto-aof-rewrite-min-size64mb
################################LUASCRIPTING#############################
#一个Lua脚本最长的执行时间为5000毫秒(5秒),如果为0或负数表示无限执行时间。
lua-time-limit5000
################################LOWLOG################################
#RedisSlowLog
记录超过特定执行时间的命令。
执行时间不包括I/O计算比如连接客户端,返回结果等,只是命令执行时间
可以通过两个参数设置slowlog:
一个是告诉Redis执行超过多少时间被记录的参数slowlog-log-slower-than(微妙),
另一个是slowlog的长度。
当一个新命令被记录的时候最早的命令将被从队列中移除
下面的时间以微妙为单位,因此1000000代表一秒。
注意指定一个负数将关闭慢日志,而设置为0将强制每个命令都会记录
slowlog-log-slower-than10000
对日志长度没有限制,只是要注意它会消耗内存
可以通过
SLOWLOGRESET回收被慢日志消耗的内存
推荐使用默认值128,当慢日志超过128时,最先进入队列的记录会被踢出
slowlog-max-len128
################################
事件通知
#############################
当事件发生时,Redis可以通知Pub/Sub客户端。
可以在下表中选择Redis要通知的事件类型。
事件类型由单个字符来标识:
#K
Keyspace事件,以_keyspace@_的前缀方式发布
#E
Keyevent事件,以_keysevent@_的前缀方式发布
#g
通用事件(不指定类型),像DEL,EXPIRE,RENAME,…
#$
String命令
#s
Set命令
#h
Hash命令
#z
有序集合命令
#x
过期事件(每次key过期时生成)
#e
清除事件(当key在内存被清除时生成)
#A
g$lshzxe的别称,因此”AKE”意味着所有的事件
#notify-keyspace-events带一个由0到多个字符组成的字符串参数。
空字符串意思是通知被禁用。
例子:
启用list和通用事件:
#notify-keyspace-eventsElg
默认所用的通知被禁用,因为用户通常不需要改特性,并且该特性会有性能损耗。
注意如果你不指定至少K或E之一,不会发送任何事件。
notify-keyspace-events“”
##############################
高级配置
###############################
当hash中包含超过指定元素个数并且最大的元素没有超过临界时,
#hash将以一种特殊的编码方式(大大减少内存使用)来存储,这里可以设置这两个临界值
#RedisHash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现,
这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的valueredisObject的encoding为zipmap,
当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。
hash-max-zipmap-entries512
hash-max-zipmap-value64
和Hash一样,多个小的list以特定的方式编码来节省空间。
#list数据类型节点值大小小于多少字节会采用紧凑存储格式。
list-max-ziplist-entries512
list-max-ziplist-value64
#set数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储。
set-max-intset-entries512
和hashe和list一样
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- redis 常用命令 常见 错误 配置 技巧 分享
![提示](https://static.bdocx.com/images/bang_tan.gif)