redis专题六:redis 删除策略、淘汰策略、数据库与缓存数据一致性、事物、发布订阅

一、删除策略

redis使用:惰性删除+定期删除
1、定时删除–>以CPU内存换redis内存
定时删除过期的缓存值
2、惰性删除–>以redis内存换CPU内存
查询到该key时如果过期,删除该过期的缓存值
3、定期删除
1)redis在启动的时候读取配置文件hz的值,默认为10

2)每秒执行hz次serverCron()–>databasesCron()—>actveEXpireCyle()
3)actveEXpireCyle()对每个expires[]进行逐一检测,每次执行250ms/hz
4)对某个expires[
]检测时,随机挑选N个key检查
如果key超时,删除key
如果一轮中删除的key的数量>N*25%,循环该过程
如果一轮中删除的key的数量小于等于N25%,检查下一个expires[ ]
current_db用于记录actveEXpireCyle()进入哪个expires[ * ] 执行,如果时间到了,那么下次根据current_db继续执行

二、淘汰策略

redis内存使用达到设置值的时候执行
逐出算法:
相关配置:
maxmemory: 最大可使用内存,占用物理内存的比例,默认值为0,表示不限制。生产环境一般根据需求设置,通常50%以上
maxmemory-policy: 达到最大内存后,对挑选出来的数据进行删除策略
maxmemory-samples: 每次选取待删除数据的个数,选取数据时并不会全库扫描,采用随机获取数据的方式作为待检测删除数据
在这里插入图片描述

三、数据库与缓存数据一致性

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

四、redis事务

  • 1、什么是redis的事务?

redis事务就是一个命令执行的队列,将一系列预定义命令包装成一个整体,就是一个队列。当执行的时候,一次性按照添加顺序依次执行,中间不会被打断或者干扰。

  • 2、能干嘛?
    一个队列中,一次性,顺序性,排他性的执行一系列命令

  • 3、redis事务基本操作
    开启事务:multi 设置事务的开始位置,这个指令开启后,后面所有的指令都会加入事务中
    执行事务: exec 设置事务的结束位置,同时执行事务,与multi成对出现,成对使用
    取消事务:discard 终止当前事务,取消multi后,exec前的所有指令

1)加入事务的命令并没有立马执行,而且加入队列中,exec命令后才执行
2)discard 终止当前事务,取消multi后,exec前的所有指令
加入和执行事务有错误会怎么办?
3)加入事务语法报错,事务则取消
4)执行事务报错,则成功的返回成功,失败的返回失败,不影响报错后面的指令

注意: 已经执行完毕的命令对应的数据不会自动回滚,需要程序员自己实现

监控key
watch: 对key进行监控,如果在exec执行前,监控的key发生了变化,终止事务执行
unwatch: 取消对所有的key进行监控
在这里插入图片描述

  • 4、事物情况:

1)正常执行
注意:加入事务的命令并没有立马执行,而且加入队列中,exec命令后才执行
在这里插入图片描述

2)取消事务
discard 终止当前事务,取消multi后,exec前的所有指令
在这里插入图片描述

3)程序加入队列出错
加入事务语法报错,事务则取消
在这里插入图片描述

4)程序执行报错
执行事务报错,则成功的返回成功,失败的返回失败,不影响报错后面的指令
在这里插入图片描述

五、redis发布订阅

查看菜鸟教程
publish: 发布消息   语法:publish channel名称   “消息内存”subscribe: 订阅消息  语法:subscribe channel名称subscribe: 使用通配符订阅消息 语法: pubscribe channel*名称punsubscribe: 使用通配符退订消息。语法:punsubscribe channel*名称unsubscribe : 退订消息 语法:unsubscribe  channel名称

以上信息来我在鲁班学院学习的总结,鲁班学院很不错,值得报班

发布了143 篇原创文章 · 获赞 49 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/weixin_36586564/article/details/103987847