Redis

目录

1、支持的数据结构

2、常见应用场景

3、持久化方式

(1) 快照持久化

(2) 只追加文件(AOF,append-only file)持久化

4、复制

5、事务

6、优化

7、过期删除

(1) 立即删除

(2) 惰性删除(被动删除)

(3) 定时删除(主动删除)


1、支持的数据结构

  • 字符串(string)

  • 列表(list)

  • 集合(set)

  • 散列(hash,可以看成一个map或者数据库里的一行数据)

  • 有序集合(和散列类似,存放键值对,但是值只能是浮点型,且按照值排序)

2、常见应用场景

        登录和cookie缓存、购物车、浏览记录、网页缓存(不用每次都请求数据、动态生成)、数据行缓存(MySQL中的一条数据)、网页分析。

3、持久化方式

(1) 快照持久化

        全部数据写入数据库中;当redis、系统或者硬件出问题时,会丢失最近一次创建完照之后的所有数据。

(2) 只追加文件(AOF,append-only file)持久化

        将写命令(AOF文件)加载到硬盘中,通过执行AOF中的写命令,持久化数据;AOF文件可能会比较大,导致持久化过程缓慢甚至阻塞。

4、复制

        主从服务器复制、主从链、更换故障主服务器。

5、事务

        使用MULTI 和 EXEC。

6、优化

        使用流水线(pipeline)。

7、过期删除

(1) 立即删除

        在设置键的过期时间时,创建一个回调事件,当过期时间达到时,由时间处理器自动执行键的删除操作。立即删除能保证内存中数据的最大新鲜度,因为它保证过期键值会在过期后马上被删除,其所占用的内存也会随之释放。但是立即删除对cpu是最不友好的。因为删除操作会占用cpu的时间,如果刚好碰上了cpu很忙的时候,比如正在做交集或排序等计算的时候,就会给cpu造成额外的压力。而且目前redis事件处理器对时间事件的处理方式--无序链表,查找一个key的时间复杂度为O(n),所以并不适合用来处理大量的时间事件。

(2) 惰性删除(被动删除)

        键过期了就过期了,不管。每次从dict字典中按key取值时,先检查此key是否已经过期,如果过期了就删除它,并返回nil,如果没过期,就返回键值。惰性删除是指,某个键值过期后,此键值不会马上被删除,而是等到下次被使用的时候,才会被检查到过期,此时才能得到删除。所以惰性删除的缺点很明显:浪费内存。dict字典和expires字典都要保存这个键值的信息。举个例子,对于一些按时间点来更新的数据,比如log日志,过期后在很长的一段时间内可能都得不到访问,这样在这段时间内就要拜拜浪费这么多内存来存log。这对于性能非常依赖于内存大小的redis来说,是比较致命的。

(3) 定时删除(主动删除)

        每隔一段时间,对expires字典进行检查,删除里面的过期键。从上面分析来看,立即删除会短时间内占用大量cpu,惰性删除会在一段时间内浪费内存,所以定时删除是一个折中的办法。定时删除是:每隔一段时间执行一次删除操作,并通过限制删除操作执行的时长和频率,来减少删除操作对cpu的影响。另一方面定时删除也有效的减少了因惰性删除带来的内存浪费。

        可以看到,第二种为被动删除,第一种和第三种为主动删除,且第一种实时性更高。redis使用的过期键值删除策略是:惰性删除加上定期删除,两者配合使用。

        详细redis如何设置过期时间、如何保存过期时间等见https://www.jianshu.com/p/9352d20fb2e0

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值