Redis缓存的使用

举报
多米诺的古牌 发表于 2022/02/28 17:32:14 2022/02/28
【摘要】 1.Redis的作为缓存的使用Redis作为缓存使用,是为了减少关系型数据库的压力而诞生的。那么缓存的数据,其实是相对不那么重要的,因为这些数据不是持久化的数据(此处只对Redis作为缓存进行分析),也不是全量的数据,而是一些随着访问而产生变化的热数据。2.Redis缓存中的热数据处理方法既然我们知道了Redis作为缓存在使用时,存储的数据是会随着访问而产生变化的热数据,会不定时的发生变化产...

1.Redis的作为缓存的使用

Redis作为缓存使用,是为了减少关系型数据库的压力而诞生的。那么缓存的数据,其实是相对不那么重要的,因为这些数据不是持久化的数据(此处只对Redis作为缓存进行分析),也不是全量的数据,而是一些随着访问而产生变化的热数据。

2.Redis缓存中的热数据处理方法

既然我们知道了Redis作为缓存在使用时,存储的数据是会随着访问而产生变化的热数据,会不定时的发生变化产生增量,但是内存的大小肯定是有限的而且是价格很昂贵的,在没有特别的需求的情况下不能无限的去扩充下去,是有一定瓶颈的,那么面对Redis缓存中不断产生的热数据增量我们要怎么处理呢?

2.1 设置key的有效期

通过设置key的有效期,来人为的根据业务需求去处理热数据的增量问题,过期的key会自动的从Redis缓存中被剔除出去。如图所示,设置k1的值为123并且设置过期时间为10秒,使用指令ttl key 的方法可以查看过期时间,在过期时间还没到的时候(ttl k1不为-2的情况),我们可以通过get指令来获取key的值。

当key过期后(ttl k1为-2的情况),我们再去获取key的值会发现Redis缓存中已经不存在了(nil)

当再次设置k1的值时,我们查看ttl过期时间,返回值是-1,表示永久性保存(除非人为删除这个key,或者清库)。

通过上面的小栗子,我们可以总结出两点:

2.1.1 Redis的缓存数据,在设置有效期后会进行倒计时,不会因为查询访问而延长。

2.1.2 Redis的缓存数据,在设置有效期后,如果发生写入修改操作,此时会将过期时间进行剔除(ttl返回-1的情况),结果会变成永久性的数据(不经过人为删除一直存在)。

2.2 内存设置策略

2.2.1 设置Redis最大使用内存空间

通过访问redis配置文件,指令是 etc/redis/6379.conf

在redis的配置文件中可以找到maxmemory <bytes>进行配置,redis最大的使用内存空间,建议配置时不要太大或者太小在1G~10G之间比较合适。

在redis的配置文件中可以找到maxmemory-policy noeviction进行达到maxmemory 配置的限制大小的时候进行的策略,

noeviction类型是达到限制大小后返回错误,在将Redis用于持久化时使用,在Redis作为缓存时不要使用

lru最近使用的次数很少的情况,进行逐出

lfu很长时间没有使用的情况,进行逐出

random当达到限制后随机逐出

ttl移除过期时间最近的key

这些策略都是在达到redis最大配置时进行策略,因为人为可以干预一部分,但在很少使用,或者很长时间不使用的会很消耗资源,此时会进行除了noeviction之外的策略配置。

3.Redis处理过期key的方式

分为被动和主动方式两种。

被动方式是当客户端访问时,发现的key过期的情况

主动方式是周期轮训判定的方式。因为很多key要是一直不去访问,就会一直无意义的占用着资源,redis会定时随机测试keys的过期时间(每秒10次进行随机抽测20个keys,删除发现的过期的keys,如果多余25%的keys过期了则重复抽检20个keys),在任何给定的时间内最多清除四分之一的过期keys。

通过这两种淘汰过期key方式在牺牲少量的内存的情况下最大的保证了Redis的高性能。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。