redis知识(一)

redis基础知识

好记性不如烂笔头!

redis事物

单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。

相关命令

1)MULTI
MULTI 开始一个事务, 然后将多个命令入队到事务
2)EXEC
命令触发事务
3)DISCARD
事物回滚,将之前对列中的命令清除
4)WATCH
当某个事务需要按条件执行时,就要使用这个命令将给定的键设置为受监控的,在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断
5)UNWATCH
清除所有先前为一个事务监控的键

如下命令执行(测试multi、exec命令):
在一个终端1中正常执行如下
在这里插入图片描述
测试两个终端下,添加watch监控,查看执行结果
终端1执行
在这里插入图片描述
终端2改变name的值
在这里插入图片描述
终端1执行exec
在这里插入图片描述
发现事物没有执行成功,因为监控到name的值出现了改变,所以进行了事物的回滚!

缓存击穿、缓存穿透、缓存雪崩

参考文章如下:
原文链接1
前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果。

缓存击穿

key对应的数据存在,但在redis中过期,此时若有大量并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。
办法:
热点数据到期导致大量数据打到数据库上。
加上互斥锁,就是在缓存失效的时候(判断拿出来的值为空),不是立即去load db,而是先使用缓存工具的某些带成功操作返回值的操作(比如Redis的SETNX)去set一个mutex key,当操作返回成功时,再进行load db的操作并回设缓存;否则,就重试整个get缓存的方法。

缓存穿透

key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会到数据源,从而可能压垮数据源。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。
办法:
布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。
将空设置进缓存,如果一个查询返回的数据为空(不管是数据不存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。

缓存雪崩

当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如DB)带来很大压力。

办法:
缓存的失效时间错开,加入随机的一个时间,保证不都在同一时间打到数据库上
加上锁,同缓存穿透

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值