发表于: 2019-12-25 22:41:19
2 1022
今天做了什么
为查询添加缓存
有几种实现方式
1.基于注解 @EnableCache
2.使用redisTemplate
收获
顺便深入学习下redis:
1.如果大量key需要设置统一时间过期,一般要注意什么
关键词:缓存雪崩
如果大量的key过期时间设置的过于集中,到过期的那个时间点,redis可能会出现短暂的卡顿现象。严重的话会出现缓存雪崩,我们一般需要在时间上加一个随机值,使得过期时间分散一些。
2.如果redis正在给线上的业务提供服务,那使用keys指令会有什么问题:
关键词:redis的单线程
keys指令会导致线程阻塞一段时间,线上服务会停顿,直到指令执行完毕,服务才能恢复。这个时候可以使用scan指令,scan指令可以无阻塞的提取出指定模式的key列表,但是会有一定的重复概率,在客户端做一次去重就可以了,但是整体所花费的时间会比直接用keys指令长。
3.redis异步队列怎么用:
一般使用list结构作为队列,rpush生产消息,lpop消费消息。
当lpop没有消息的时候,要适当sleep一会再重试。
能不能不用sleep?
list还有个指令叫blpop,在没有消息的时候,它会阻塞住直到消息到来。
能不能生产一次消费多次?
使用pub/sub主题订阅者模式,可以实现 1:N 的消息队列。
4.redis持久化的方式,服务主从数据如何交互
RDB叫快照,做镜像全量持久化,AOF是只追加文件,做增量持久化。因为RDB会耗费较长时间,不够实时,在停机的时候会导致大量丢失数据,所以需要AOF来配合使用。在redis实例重启时,会使用RDB持久化文件重新构建内存,再使用AOF重放近期的操作指令来实现完整恢复重启之前的状态。
RDB的原理:
关键词: fork和cow。
fork是指redis通过创建子进程来进行RDB操作,cow指的是copy on write,子进程创建后,父子进程共享数据段,父进程继续提供读写服务,写脏的页面数据会逐渐和子进程分离开来。
5.redis内存淘汰机制
redis 提供 6种数据淘汰策略:
volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰
volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰
volatile-random:从已设置过期时间的数据集中任意选择数据淘汰
allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key(这个是最常用的)
allkeys-random:从数据集中任意选择数据淘汰
no-eviction:禁止驱逐数据,也就是说当内存不足以容纳新写入数据时,新写入操作会报错。
4.0版本后增加以下两种:
volatile-lfu:从已设置过期时间的数据集(server.db[i].expires)中挑选最不经常使用的数据淘汰
allkeys-lfu:当内存不足以容纳新写入数据时,在键空间中,移除最不经常使用的key
6.redis集群,集群的高可用怎么保证,集群的原理是什么
Redis Sentinal着眼于高可用,在master宕机时会自动将slave提升为master,继续提供服务
Redis Cluster着眼于扩展性,在单个redis内存不足时,使用Cluster进行分片存储。
问题
经由zuul网关层后,redis中存取List<Object>没有很大性能提升
明天的计划
继续解决项目性能问题, 优化代码
评论