目录Redis内存淘汰策略六种淘汰策略Redis中的自动过期机制Redis中的事务操作watch和Multi的区别Redis内存淘汰策略 为什么要有淘汰策略? 答:将Redis用作缓存时,Redis数据存在内存中,如果内
为什么要有淘汰策略?
答:将Redis用作缓存时,Redis数据存在内存中,如果内存空间用满,就会自动驱逐老的数据。
redis配置文件:可以配置redis存放数据的阈值(例如:100mb),再配置淘汰策略。
如何配置淘汰策略?
在redis.conf文件中, 设置Redis 内存大小的限制,我们可以设置maxmemory ,当数据达到限定大小后,会选择配置的策略淘汰数据。
比如:maxmemory 300mb。
通过配置 maxmemory-policy 设置Redis的淘汰策略。比如:maxmemory-policy volatile-lru
首先需要配置redis配置文件,开启 key 失效监听。
当key失效时,可以执行我们的客户端回调监听的方法。
需要在Redis中配置:notify-keyspace-events “Ex”
代码在之前的基础上增加:SpringBoot整合key失效监听
RedisListenerConfig 配置类
@Configuration
public class RedisListenerConfig {
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
return container;
}
}
监听 key 的类
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
@Override
public void onMessage(Message message, byte[] pattern) {
String expiraKey = message.toString();
System.out.println("失效的key:" + expiraKey);
}
}
注意:如果是多个springboot项目或者多个 JVM 服务监听同一个key的话,每一个 jvm 都会监听到这个key失效并且执行相应的逻辑代码。
多服务(jvm)监听Redis key失效通知,如何保证只有一个jvm是执行监听的代码?
答:可以使用 ZooKeeper 的选举机制,多个服务注册到zookeeper中,选举出一个leader,由为 leader 的jvm来执行监听代码。
注意:Redis官方是没有提供回滚方法,只提供了取消事务。
Redis中本身就是单线程的能够保证线程安全问题,不需要考虑线程安全问题。
取消事务跟回滚有什么区别呢?为什么redis不支持回滚事务?
Mysql中开启了事务,对该行数据上行锁—,Commit 数据可以提交
回滚:对事务取消和行锁都会撤销
Redis没有回滚事务的概念,单纯取消事务(不提交事务) 不上锁
Watch相当于乐观锁,在事务提交之前没有发生变化才可以提交事务。
Multi 就是开启事务,操作数据之后可以提交事务或者取消提交事务。
到此这篇关于Redis深入了解内存淘汰与事务操作的文章就介绍到这了,更多相关Redis内存淘汰与事务操作内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
--结束END--
本文标题: Redis深入了解内存淘汰与事务操作
本文链接: https://lsjlt.com/news/33480.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-23
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0