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的高性能。
- 点赞
- 收藏
- 关注作者
评论(0)