1. 5种基本数据类型

string: 字符串
set name tom
get name
exists name
del name
list: 列表 (ziplist + quicklist)
rpush books python
hash: 字典
hset books python ‘python books’
set: 集合
sadd books nodejs
zset: 有序集合 (跳跃列表)
zadd books 9.1 ‘nodejs deepin’

2 Redis 过期机制

  • 定期删除
  • 惰性删除
  • 定时删除(定时扫描一定数量设置了expire 的key,设置最大使用内存限制)

    3. Redis 内存淘汰机制

    noeviction: 达到内存限制,禁止写入
    allkeys-lru: 达到限制,从所有key 中淘汰最少使用的
    allkeys-random: 达到限制, 所有key 中随机淘汰
    volatile-lru: 达到限制, 淘汰设置了 expire 的 key 中最近 最少使用的 key
    volatile-random: 达到限制, 淘汰设置了 expire 的 key 中最近 最少使用的 key
    volatile-ttl: 达到限制, 淘汰设置了 expire 的 key 中最久 最少使用的 key
    volatitle-lfu: 淘汰设置了 expire 的最少使用到key(redis 4.0)
    allkey-lfu: 淘汰设置了 expire 的最少使用到key (redis 4.0)
    LRU是Least Recently Used的缩写,即最近最少使用。LRU源于操作系统的一种页面置换算法,选择最近最久未使用的页面予以淘汰。在Redis里,就是选择最近最久未使用的key进行删除。

    4.Redis 固化

    4.1 RDB 持久化(快照)

    1. # 以下配置表示的条件:
    2. # 服务器在900秒之内被修改了1次
    3. save 900 1
    4. # 服务器在300秒之内被修改了10次
    5. save 300 10
    6. # 服务器在60秒之内被修改了10000次
    7. save 60 10000
    8. stop-writes-on-bgsave-error yes // 后台备份进程出错时,主进程停不停止写入?
    9. rdbcompression yes // 导出的rdb文件是否压缩
    10. Rdbchecksum yes // 导入rbd恢复时数据时,要不要检验rdb的完整性
    11. dbfilename dump.rdb //导出来的rdb文件名
    12. dir ./ //rdb的放置路径

    4.2 AOF 持久化(日志)

    在生产环境里面,一般来说AOF都是要打开的,除非你说随便丢个几分钟的数据也无所谓。
    1. appendonly no # 是否打开 aof日志功能
    2. appendfsync always # 每1个命令,都立即同步到aof. 安全,速度慢
    3. appendfsync everysec # 折衷方案,每秒写1次
    4. appendfsync no # 写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof. 同步频率低,速度快,
    5. no-appendfsync-on-rewrite yes: # 正在导出rdb快照的过程中,要不要停止同步aof
    6. auto-aof-rewrite-percentage 100 #aof文件大小比起上次重写时的大小,增长率100%时,重写
    7. auto-aof-rewrite-min-size 64mb #aof文件,至少超过64M时,重写

5. 缓存淘汰三种模式(应用)

  • Cache Aside 更新模式
  • Read/Write Through 更新模式
  • Write Behind Caching 更新模式

5.1 Cache Aside 更新模式

避免先更新数据库,再更新缓存
避免先删除缓存,再更新数据库
1111.jpg

5.2 Read/Write Through 更新模式

2222.jpg

5.3 Write Behind Caching 更新模式

3333.jpg

6. 布隆过滤器

默认不带功能,需要安装插件配置。
原理

  • 布隆过滤器是用于判断一个元素是否在集合中。通过一个位数组和N个hash函数实现。
  • 优点:
    • 空间效率高,所占空间小。
    • 查询时间短。
  • 缺点:
    • 元素添加到集合中后,不能被删除。
    • 有一定的误判率

参考文档:
Redis的过期策略和内存淘汰策略
Redis持久化配置(rdb,aof)
使用缓存的正确姿势

https://segmentfault.com/a/1190000022094801 大Key问题