标签:
一 Redis 支持写的指令
Redis大概的命令如下:
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
二 Redis 配置
1 redis 配置文件一般是在/etc/redis.conf
2 redis官方提供的redis.conf文件,足有700+行,其中100多行为有效配置行,另外的600多行为注释说明。
3 redis配置中对单位的大小写不敏感,1GB、1Gb和1gB都是相同的。由此也说明,redis只支持bytes,不支持bit单位。
4 redis支持“主配置文件中引入外部配置文件 include /path/to/other.conf
5 redis 开头的单位转换:(从配置文件中copy出来)
# 1k => 1000 bytes # 1kb => 1024 bytes # 1m => 1000000 bytes # 1mb => 1024*1024 bytes # 1g => 1000000000 bytes # 1gb => 1024*1024*1024 bytes # # units are case insensitive so 1GB 1Gb 1gB are all the same.
6 redis配置文件被分成了几大块区域:
1)通用(general)
2)快照(snapshotting)
3)复制(replication)
4)安全(security)
5)限制(limits)
6)追加模式(append only mode)
7)LUA脚本(lua scripting)
8)慢日志(slow log)
9)事件通知(event notification)
三 通用
以daemon形式运行时,redis会生成一个pid文件,默认会生成在/var/run/redis.pid。当然,你可以通过pidfile来指定pid文件生成的位置。
可以通过unixsocket配置项来指定unix socket文件的路径,并通过unixsocketperm来指定文件的权限
假如设置为60秒,则server端会每60秒向连接空闲的客户端发起一次ACK请求,以检查客户端是否已经挂掉,对于无响应的客户端则会关闭其连接。
所以关闭一个连接最长需要120秒的时间。如果设置为0,则不会进行保活检测。
假如你在daemon情况下将日志设置为输出到标准输出,则日志会被写到/dev/null中。
数据库的编号将是0到15。默认的数据库是编号为0的数据库。用户可以使用select <DBid>来选择相应的数据库。
四 快照 (主要涉及的是redis的RDB持久化相关的配置)
如果你想禁用RDB持久化的策略,只要不设置任何save指令就可以,或者给save传入一个空字符串参数也可以达到相同效果
如:
// -------------------------------------------------------- #save 900 1 // 表示每15分钟且至少有1个key改变,就触发一次持久化 #save 300 10 // 表示每5分钟且至少有10个key改变,就触发一次持久化 #save 60 10000 // 表示每60秒至少有10000个key改变,就触发一次持久化 #save "" // 禁用 // --------------------------------------------------------
五 复制 (就是主从同步功能)
一般情况下,我们会建议用户为从redis设置一个不同频率的快照持久化的周期,或者为从redis配置一个不同的服务端口等等。
这里,从redis可以有两种选择:
a)如果slave-serve-stale-data设置为yes(默认),则从redis仍会继续响应客户端的读写请求。
b)如果slave-serve-stale-data设置为no,则从redis会对客户端的请求返回“SYNC with master in progress”,
当然也有例外,当客户端发来INFO请求和SLAVEOF请求,从redis还是会进行处理。
# slave-read-only yes
六 安全
比如可以把CONFIG命令改成一个很复杂的名字,这样可以避免外部的调用,同时还可以满足内部调用的需要:
七 限制
对于内存移除规则来说,redis提供了多达6种的移除规则。他们是:
1.volatile-lru:使用LRU算法移除过期集合中的key
2.allkeys-lru:使用LRU算法移除key
3.volatile-random:在过期集合中移除随机的key
4.allkeys-random:移除随机的key
5.volatile-ttl:移除那些TTL值最小的key,即那些最近才过期的key。
6.noeviction:不进行移除。针对写操作,只是返回错误信息。
八 追加模式
默认情况下,redis会异步的将数据持久化到磁盘。这种模式在大部分应用程序中已被验证是很有效的。
但是在一些问题发生时,比如断电,则这种机制可能会导致数分钟的写请求丢失。追加文件(Append Only File)是一种更好的保持数据一致性的方式。
即使当服务器断电时,也仅会有1秒钟的写请求丢失,当redis进程出现问题且操作系统运行正常时,甚至只会丢失一条写请求。
redis支持三种不同的模式:
a.no:不调用fsync()。而是让操作系统自行决定sync的时间。这种模式下,redis的性能会最快。
b.always:在每次写请求后都调用fsync()。这种模式下,redis会相对较慢,但数据最安全。
c.everysec:每秒钟调用一次fsync()。这是性能和安全的折衷。
no-appendfsync-on-rewrite no
rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
# repl-ping-slave-period 10
在主从同步时,可能在这些情况下会有超时发生:
1.以从redis的角度来看,当有大规模IO传输时。
2.以从redis的角度来看,当数据传输或PING时,主redis超时
3.以主redis的角度来看,在回复从redis的PING时,从redis超时
# repl-disable-tcp-nodelay no
# repl-backlog-ttl 3600
# min-slaves-to-write 3 # min-slaves-max-lag 10
上面这个例子表示,假如有大于等于3个从redis的连接延迟大于10秒,那么主redis就不再接受外部的写请求。
上述两个配置中有一个被置为0,则这个特性将被关闭。默认情况下min-slaves-to-write为0,而min-slaves-max-lag为10。
标签:
原文地址:http://www.cnblogs.com/fangshenghui/p/5694509.html