美文网首页
redis常见知识点

redis常见知识点

作者: ES_KYW | 来源:发表于2022-02-23 18:41 被阅读0次

持久化

rdb:内存数据快照,覆盖磁盘中旧的快照数据 快照期间如果有新的数据写入不会在此次快照过程中保留 占用内存小
aof:每次变更操作时将操作语句通过write函数写入文件中,追加到磁盘中 优势:数据不丢失 缺点占用内心大


支持数据类型和数据结构

String:
List:双向链表结构
hash:
Set:
ZSet:


缓存穿透、缓存击穿、缓存雪崩的概念以及处理办法

缓存穿透:数据库和缓存中均不存在,每次访问都会去访问数据库。
解决方案:1.对空值做缓存,设置过期时间;2.使用布隆过滤器 (布隆过滤器会判断数据库中是否存在该数据,不存储具体值,而是根据hash算法最终记录是否存在,用位记录,占用空间极小)
缓存击穿:过期时间失效
解决方案:1.不设置过期时间;2.加互斥锁,即使一时失效也不会出现同时大量访问数据库的情况;


缓存雪崩:

同一时间点,过期时间都失效了
解决方案:1.分开设置过期时间;2.热点数据不设置过期时间;


redis数据统计

PV:page view 单页访问量。 给每个网页一个独立的 Redis 计数器就可以了,来一个请求,incrby 一次,最终就可以统计出所有的 PV 数据;
UV:unique view 自然人访问量。
1.使用Set集合统计,集合有去重功能,在每个页面设置一个集合,将来访问的用户ID存储其中,然后统计数量。缺点占用内存较大。
2.使用bitmap位图功能。

#设置指定位置的位值
setbit key offset value    setbit  2021-01-01  32   1      offset可以当做用户的自增ID
#或者指定位置的位值
getbit key offset             getbit  2021-01-01      获取用户在2021-01-01这天的登录状态
#获取指定范围内key为1的数量
bitcount key start end   bitcount 2021-01-01 12  100    2021-01-01这天用户ID在12到100范围内多少个用户登录过

3.HyperLogLog基数统计,特点是占用内存小,有一定的错误率

127.0.0.1:6379> PFadd 2022-02-02 a b c d e f g h i j
(integer) 1
127.0.0.1:6379> PFadd 2022-02-02  h i j  重复数据返回0
(integer) 0
127.0.0.1:6379> PFcount 2022-02-02
(integer) 10   统计出2022-02-02这天有多少用户访问

127.0.0.1:6379> PFadd mykey2 i j z x c v b n m
(integer) 1
127.0.0.1:6379> PFCOUNT mykey2
(integer) 9
127.0.0.1:6379> PFMERGE mykey3 mykey mykey2
OK
127.0.0.1:6379> PFCOUNT mykey3
(integer) 15
127.0.0.1:6379>

缓存淘汰策略和过期删除策略(定期删除和惰性删除)

内存不足的淘汰策略:

1.直接报错;
2.加入键时,如果过限,首先通过LRU算法驱逐最久没有使用的键;
#设置过过期
3.加入键时,如果过限,首先从设置了过期时间的键集合中驱逐最久没有使用的键;
#已经过期
4.加入键时,如果过限,从所有key随机删除;
5.加入键时,如果过限,从过期键的集合中随机删除;
#马上过期
6.从配置了过期时间的键中驱逐马上就要过期的键;
7.从所有配置了过期时间的键中驱逐使用频率最少的键;
8.从所有键中驱逐使用频率最少的键;

Redis数据存储在内存中,做缓存能提供访问速度,单线程确保线程安全,可以当做分布式锁,支持事务,可以做消息队列,发布-订阅模式。支持Master-Slave模式,集群哨兵模式。

相关文章

网友评论

      本文标题:redis常见知识点

      本文链接:https://www.haomeiwen.com/subject/rhoolrtx.html