# volatile-random -> 移除设置过过期时间的随机 key # allkeys->random -> remove a randomkey, any key # volatile-ttl -> 移除即将过期的 key(minor TTL) # noeviction -> 不移除任何可以,只是返回一个写错误
# 注意:对于上面的策略,如果没有合适的 key 可以移除,当写的时候 Redis 会返回一个错误 # 默认是 : volatile-lru
# maxmemory-policy volatile-lru
# LRU 和 minimal TTL 算法都不是精准的算法,但是相对精确的算法 ( 为了节省内存 ) ,随意你可以选择样本大小进行检测。
# Redis 默认的灰选择 3 个样本进行检测,你可以通过 maxmemory-samples 进行设置 # maxmemory-samples 3
############################## AOF###############################
# 默认情况下, redis 会在后台异步的把数据库镜像备份到磁盘,但是该备份是非常耗时的,而且备份也不能很频繁,如果发生诸如拉闸限电、拔插头等状况,那么将造成比较大范围的数据丢失。 # 所以 redis 提供了另外一种更加高效的数据库备份及灾难恢复方式。
# 开启 append only 模式之后, redis 会把所接收到的每一次写操作请求都追加到 appendonly.aof 文件中,当 redis 重新启动时,会从该文件恢复出之前的状态。
# 但是这样会造成 appendonly.aof 文件过大,所以 redis 还支持了 BGREWRITEAOF 指令,对 appendonly.aof 进行重新整理。
# 你可以同时开启 asynchronous dumps 和 AOF appendonly no
# AOF 文件名称 ( 默认 : \# appendfilename appendonly.aof # Redis 支持三种同步 AOF 文件的策略 : # no: 不进行同步,系统去操作 . Faster.
# always: always 表示每次有写操作都进行同步 . Slow, Safest. # everysec: 表示对写操作进行累积,每秒同步一次 . Compromise. # 默认是 \,按照速度和安全折中这是最好的。
# 如果想让 Redis 能更高效的运行,你也可以设置为 \,让操作系统决定什么时候去执行 # 或者相反想让数据更安全你也可以设置为 \# 如果不确定就用 \# appendfsync always appendfsync everysec # appendfsync no
# AOF 策略设置为 always 或者 everysec 时,后台处理进程 ( 后台保存或者 AOF 日志重写 ) 会执行大量的 I/O 操作
# 在某些 Linux 配置中会阻止过长的 fsync() 请求。注意现在没有任何修复,即使 fsync 在另外一个线程进行处理
# 为了减缓这个问题,可以设置下面这个参数 no-appendfsync-on-rewrite no-appendfsync-on-rewrite no # AOF 自动重写
# 当 AOF 文件增长到一定大小的时候 Redis 能够调用 BGREWRITEAOF 对日志文件进行重写 # 它是这样工作的: Redis 会记住上次进行些日志后文件的大小 ( 如果从开机以来还没进行过重写,那日子大小在开机的时候确定 )
# 基础大小会同现在的大小进行比较。如果现在的大小比基础大小大制定的百分比,重写功能将启动 # 同时需要指定一个最小大小用于 AOF 重写,这个用于阻止即使文件很小但是增长幅度很大也去重写 AOF 文件的情况
# 设置 percentage 为 0 就关闭这个特性 auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
################################ LUASCRIPTING #############################
# 一个 Lua 脚本最长的执行时间为 5000 毫秒( 5 秒),如果为 0 或负数表示无限执行时间。 lua-time-limit 5000
################################LOW LOG################################ # Redis Slow Log 记录超过特定执行时间的命令。执行时间不包括 I/O 计算比如连接客户端,返回结果等,只是命令执行时间
# 可以通过两个参数设置 slow log :一个是告诉 Redis 执行超过多少时间被记录的参数 slowlog-log-slower-than( 微妙 ) ,
# 另一个是 slow log 的长度。当一个新命令被记录的时候最早的命令将被从队列中移除 # 下面的时间以微妙为单位,因此 1000000 代表一秒。
# 注意指定一个负数将关闭慢日志,而设置为 0 将强制每个命令都会记录 slowlog-log-slower-than 10000
# 对日志长度没有限制,只是要注意它会消耗内存 # 可以通过 SLOWLOG RESET 回收被慢日志消耗的内存
# 推荐使用默认值 128 ,当慢日志超过 128 时,最先进入队列的记录会被踢出 slowlog-max-len 128
################################ 事件通知 ############################# # 当事件发生时, 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-events Elg
# 默认所用的通知被禁用,因为用户通常不需要改特性,并且该特性会有性能损耗。 # 注意如果你不指定至少 K 或 E 之一,不会发送任何事件。 notify-keyspace-events “”
############################## 高级配置 ############################### # 当 hash 中包含超过指定元素个数并且最大的元素没有超过临界时,
# hash 将以一种特殊的编码方式(大大减少内存使用)来存储,这里可以设置这两个临界值 # Redis Hash 对应 Value 内部实际就是一个 HashMap ,实际这里会有 2 种不同实现,
# 这个 Hash 的成员比较少时 Redis 为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的 HashMap 结构,对应的 valueredisObject 的 encoding 为 zipmap, # 当成员数量增大时会自动转成真正的 HashMap, 此时 encoding 为 ht 。 hash-max-zipmap-entries 512 hash-max-zipmap-value 64
# 和 Hash 一样,多个小的 list 以特定的方式编码来节省空间。 # list 数据类型节点值大小小于多少字节会采用紧凑存储格式。 list-max-ziplist-entries 512 list-max-ziplist-value 64
# set 数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储。 set-max-intset-entries 512
# 和 hashe 和 list 一样 , 排序的 set 在指定的长度内以指定编码方式存储以节省空间 # zsort 数据类型节点值大小小于多少字节会采用紧凑存储格式。 zset-max-ziplist-entries 128 zset-max-ziplist-value 64
# Redis 将在每 100 毫秒时使用 1 毫秒的 CPU 时间来对 redis 的 hash 表进行重新 hash ,可以降低内存的使用
# 当你的使用场景中,有非常严格的实时性需要,不能够接受 Redis 时不时的对请求有 2 毫秒的延迟的话,把这项配置为 no 。
# 如果没有这么严格的实时性要求,可以设置为 yes ,以便能够尽可能快的释放内存 activerehashing yes
# 客户端的输出缓冲区的限制,因为某种原因客户端从服务器读取数据的速度不够快,
# 可用于强制断开连接(一个常见的原因是一个发布 / 订阅客户端消费消息的速度无法赶上生产它们的速度)。
# 可以三种不同客户端的方式进行设置: # normal -> 正常客户端
# slave -> slave 和 MONITOR 客户端
# pubsub -> 至少订阅了一个 pubsub channel 或 pattern 的客户端 # 每个 client-output-buffer-limit 语法 : # client-output-buffer-limit
# 一旦达到硬限制客户端会立即断开,或者达到软限制并保持达成的指定秒数(连续)。 # 例如,如果硬限制为 32 兆字节和软限制为 16 兆字节 /10 秒,客户端将会立即断开
# 如果输出缓冲区的大小达到 32 兆字节,客户端达到 16 兆字节和连续超过了限制 10 秒,也将断开连接。
# 默认 normal 客户端不做限制,因为他们在一个请求后未要求时(以推的方式)不接收数据, # 只有异步客户端可能会出现请求数据的速度比它可以读取的速度快的场景。 # 把硬限制和软限制都设置为 0 来禁用该特性 client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb60 client-output-buffer-limit pubsub 32mb 8mb60
# Redis 调用内部函数来执行许多后台任务,如关闭客户端超时的连接,清除过期的 Key ,等等。 # 不是所有的任务都以相同的频率执行,但 Redis 依照指定的“ Hz ”值来执行检查任务。
# 默认情况下,“ Hz ”的被设定为 10 。
# 提高该值将在 Redis 空闲时使用更多的 CPU 时,但同时当有多个 key 同时到期会使 Redis 的反应更灵敏,以及超时可以更精确地处理。
# 范围是 1 到 500 之间,但是值超过 100 通常不是一个好主意。
# 大多数用户应该使用 10 这个预设值,只有在非常低的延迟的情况下有必要提高最大到 100 。 hz 10
# 当一个子节点重写 AOF 文件时,如果启用下面的选项,则文件每生成 32M 数据进行同步。 aof-rewrite-incremental-fsync yes
8.Redis官方文档对VM的使用建议:
当你的key很小而value很大时,使用VM的效果会比较好.因为这样节约的内存比较大.
当你的key不小时,可以考虑使用一些非常方法将很大的key变成很大的value,比如你可以考虑将key,value组合成一个新的value.
最好使用linux ext3 等对稀疏文件支持比较好的文件系统保存你的swap文件. vm-max-threads这个参数,可以设置访问swap文件的线程数,设置最好不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的.可能会造成比较长时间的延迟,但是对数据完整性有很好的保证.
有了VM功能,Redis终于摆脱了受内存容量限制的噩梦了,似乎我们可以称其为Redis数据库了,我们还可以想象又有多少新的用法可以产生.当然,希望这一功能不会对Redis原有的非常牛B的内存存储性能有所影响.
9. redis修改持久化路径和日志路径
复制代码 代码如下:
vim redis.conf
logfile /data/redis_cache/logs/redis.log #日志路径
dir /data/redis_cache #持久化路径,修改后 记得要把dump.rdb持久化文件拷贝到/data/redis_cache下
先杀掉redis,拷贝dump.rdb,启动 10. 清redis缓存
复制代码 代码如下:
./redis-cli #进入 dbsize
flushall #执行 exit
11. 删除redis当前数据库中的所有Key
复制代码 代码如下: flushdb
12.删除redis所有数据库中的key 复制代码 代码如下: flushall