redis

1、redis常用的五种数据类型

1、1 String(字符串)

底层是c语言的字符串,但是有一些小区别,比如内存分配的时候,是预先分配的,回收内存的时候是惰性回收。

1、2 list(底层是双向链表)

所以你会看到list有lpush,rpush,lpop,rpop等操作。

1、3 Hash

底层跟hashmap差不多,但是他扩容的时候也是两倍扩容的,有区别的是,他不是扩容是用另一条链来进行的,然后再进行修改一下。

1、4 Set

底层跟hash类似,基本一样的,就是他的key跟value都一样

1、5 Zset

底层跟set差不多,但是这里他运用了一个跳表进行排序的。

2、redis的缓存击穿,缓存穿透,缓存雪崩
2、1 缓存雪崩

Redis中大批量key在同一时间同时失效导致所有请求都打到了MySQL。而MySQL扛不住导致大面积崩塌。

雪崩解决方案:

1、缓存数据的过期时间加上个随机值,防止同一时间大量数据过期现象发生。

2、如果缓存数据库是分布式部署,将热点数据均匀分布在不同搞得缓存数据库中。

3、设置热点数据永远不过期。

2.2、缓存穿透

穿透定义:

缓存穿透 是 指缓存和数据库中都没有的数据,比如ID默认>0,黑客一直 请求ID= -12的数据那么就会导致数据库压力过大,严重会击垮数据库。

穿透解决方案:

1、后端接口层增加 用户鉴权校验,参数做校验等。

2、单个IP每秒访问次数超过阈值直接拉黑IP,关进小黑屋1天,在获取IP代理池的时候我就被拉黑过。

3、从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null 失效时间可以为15秒防止恶意攻击。

4、用Redis提供的Bloom Filter 特性也OK。

Redis中大批量key在同一时间同时失效导致所有请求都打到了MySQL。而MySQL扛不住导致大面积崩塌。

雪崩解决方案:

1、缓存数据的过期时间加上个随机值,防止同一时间大量数据过期现象发生。

2、如果缓存数据库是分布式部署,将热点数据均匀分布在不同搞得缓存数据库中。

3、设置热点数据永远不过期。

2、3 、缓存穿透

穿透定义:

缓存穿透 是 指缓存和数据库中都没有的数据,比如ID默认>0,黑客一直 请求ID= -12的数据那么就会导致数据库压力过大,严重会击垮数据库。

穿透解决方案:

1、后端接口层增加 用户鉴权校验,参数做校验等。

2、单个IP每秒访问次数超过阈值直接拉黑IP,关进小黑屋1天,在获取IP代理池的时候我就被拉黑过。

3、从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null 失效时间可以为15秒防止恶意攻击。

4、用Redis提供的Bloom Filter 特性也OK。

3、内存淘汰策略

1、volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰

2、volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰

3、volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰

4、allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰

5、allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
6、no-enviction(驱逐):禁止驱逐数据,不删除的意思。
这里有一个常用的算法LRU算法,我们可以使用hashmap跟数据结构的链表来进行LRU。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值