【redis】一篇文章快速了解redis

目录

1.数据类型

2.memcached VS redis 对比

3.部署模式

4.持久化

5.过期策略expire

6.淘汰策略(内存达到阈值)

7.常见术语


1.数据类型

数据类型 样例解释 优缺点 操作 应用场景
string key:value 简单

set、get、del

SETEX

expire

incr、decr

最常用

分布式锁

hash

bigkey:

{subKey:subval,subkey2:...}

避免了命名冲突

可统一删除

(过大时不宜,

应scan迭代删除)

过期时间针对bigkey,

不能对subkey设置过期

hset

hget

hscan

 
set

无重复数据的集合

可求交集并集差集

sadd

SDIFF

SINTER

SREM

SSCAN

SUNION

可用作抽奖,存放点赞的人

实现共同关注的人,可能认识的人等功能

zset 有序的无重复数据集合  

ZADD

ZCOUNT

ZREM

ZRANK

可以用在时事热点信息的排序
list 列表     用于消息列表

2.memcached VS redis 对比

memcache适合以KV类型,数据量、并发业务量大的场景,支持多线程操作,充分利用CPU,但缓存不能持久化

Redis拥有丰富的数据类型,支持缓存持久化,宕机更容易数据恢复,单线程场景比memcache快

3.部署模式

     
单机 可用性差 适用于可以接受缓存穿透的场景
哨兵

可用性高

提供了主从的监控,当主节点宕机,从节点快速切换成主,

适合缓存高可用场景,缺点是不易扩容
集群 横向扩展-负载均衡

适合大数据量的高可用缓存场景,集群模式内存和QPS不受限于单机

通信采用gossip协议,请求逐步打到各个节点上,有一定延迟,但集群压力比较小

4.持久化

用于宕机恢复

类型 备份内容 恢复方式
AOF

(oplog)操作日志

几乎实时备份命令,通常设置1秒备份一次

通过记录命令

重复执行进行恢复数据,

效率较低,

但数据比较全

RDB

数据快照(snapshot)快照

每隔一段时间用子线程进行全量备份

直接数据的传输覆盖,

数据不全

5.过期策略expire

内存与CPU的权衡

策略   优点 缺点
定时删除 到key过期时间立即删除

保证内存尽快释放,

保证过期的准时性

消耗CPU时间

若过期key很多,删除这些key会比较消耗CPU时间

每设置一个过期时间会创建一个定时器,大量定时器会比较影响性能

定期删除 定期时间到了会检查key是否过期,过期则删除

通过限制删除操作的时长和频率,

来减少对CPU时间的占用

会造成一定的内存占用
惰性删除 再次通过key来获取值的时候,会检查key是否过期,过期则删除 删除操作只发生在通过key取值的时候,占用CPU较少 更占用内存,若大量数据缓存而不再调用,可能导致内存溢出

6.淘汰策略(内存达到阈值)

策略 算法
volatile-lru expire的数据集中挑选最近最少使用的数据淘汰
volatile-ttl expire的数据集中挑选将要过期的数据淘汰
volatile-random expire的数据集中任意选择数据淘汰
allkeys-lru 所有key挑选最近最少使用淘汰
allkeys-random 所有key任意选择数据淘汰
no-enviction 不淘汰数据

7.常见术语

术语 现象解释 解决方案
缓存穿透

缓存不命中,

请求越过缓存访问数据库,导致数据库崩掉

缓存不存在时,数据库返回null值也存入缓存

之后直接通过缓存返回null的处理办法

缓存雪崩

大量缓存在同一时间失效

请求都打到数据库,导致数据库崩掉

加锁或队列(并发控制),缓存失效,对某个key只允许一条线程访问,其它等待

失效时间设置不同,可以在一个时间范围乘个随机数,尽量分布均匀

加二级缓存,二级缓存失效时间大于一级缓存,一级缓存失效,二级可以起到作用

手动reload如果能预计到某个时间点会有大量并发操作,可以设计手动reload缓存

缓存预热 系统启动时对热点数据进行缓存主动加载  
发布了132 篇原创文章 · 获赞 122 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/sarafina527/article/details/105297288