redis一些学习笔记

安装

如果遇到环境没有安装,先安装环境

  1. 下载安装包
    wget http://download.redis.io/releases/redis-4.0.0.tar.gz
  2. 解压
    tar -xvf redis-4.0.0.tar.gz
  3. 进入redis解压的目录,编译
    make 或 (make MALLOC=libc)
    安装
    make install

持久化

快照 RDB

手动快照

– save 单线程,会阻塞当前redis

后台异步打快照

–bgsave(fork函数调用子进程,保存快照)

RDB特点

优点:

快照为二进制文件,存储效率高
相当于按时间点备份, 可当做异地备份方案
恢复速度快

缺点

无法实时持久化
开启fork子进程,消耗redis性能
不同版本的dump文件格式不一致

操作过程 AOF

相当于恢复备份时,相当于把之前执行的所有操作重新恢复一遍.

备份时机:

  1. 按操作备份,执行成功一条,备份一条操作(数据不丢失,备份的会和真实的数据一致,但是效率较低)
  2. 按秒备份, 将每一秒的语句缓冲起来, 每隔一秒一执行(可能会丢失1秒的数据,效率较高,默认配置)
  3. 系统策略(不可控)

数据删除策略

定时删除

  • 使用定时器,扫描所有key对已经到期的数据进行清理(对cpu性能消耗大)
  • 惰性删除: 下次访问时,如果过期则删除(内存中可能会出现很多过期数据占用内存)
  • 定期删除(随机扫描,重点扫描): 将expires分成几个区,扫描每个区,每次执行250ms/server.hz,
    1. 如果遇到如果key超时,删除key
    2. 如果一轮中删除的key的数量>W*25%,循环该过程(再扫描此区)
    3. 如果一轮中删除的key的数量≤W25%,检查下一个expires[],0-15循环
    4. W取值=ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP属性值
  • 逐出算法: 有点向并发gc过程
    检测易失数据(可能会过期的数据集server.db[i].expires )
    ① volatile-lru:挑选最近最少使用的数据淘汰
    ② volatile-lfu:挑选最近使用次数最少的数据淘汰
    ③ volatile-ttl:挑选将要过期的数据淘汰
    ④ volatile-random:任意选择数据淘汰
    检测全库数据(所有数据集server.db[i].dict )
    ⑤ allkeys-lru:挑选最近最少使用的数据淘汰
    ⑥ allkeys-lfu:挑选最近使用次-数最少的数据淘汰
    ⑦ allkeys-random:任意选择数据淘汰
    放弃数据驱逐
    ⑧ no-enviction(驱逐):禁止驱逐数据(redis4.0中默认策略),会引发错误OOM(Out Of Memory)

常见问题

缓存预热

为防止redis刚启动数据为空, 导致数据库服务器承受压力较大. 刚启动时会向redis中预加载一些热点数据.

缓存雪崩

大量数据同时失效时,redis类似恢复到刚刚重启之后时,一批请求过来,导致数据库压力过大.
根据业务散列过期时间, 热点数据设置永久key,人工干预, 限流,熔断机制.

缓存击穿

热点数据访问,在高并发下,缓存还没来得及写入,请求直接转到数据库中
热点数据设置永久key, 缓存预热, 加锁双重校验(类似于单例的懒汉式)

缓存穿透

大量缓存未命中请求发生, 请求直接攻击到数据库
布隆过滤器, 缓存null值(不推荐,第一次还是会访问到数据库)

猜你喜欢

转载自blog.csdn.net/liha12138/article/details/106747758