Redis深入了解内存淘汰与事务操作

目录

Redis内存淘汰策略

六种淘汰策略

Redis中的自动过期机制

Redis中的事务操作

watch和Multi的区别

Redis内存淘汰策略

为什么要有淘汰策略?

答:将Redis用作缓存时,Redis数据存在内存中,如果内存空间用满,就会自动驱逐老的数据。

redis配置文件:可以配置redis存放数据的阈值(例如:100mb),再配置淘汰策略。

六种淘汰策略

noeviction:当内存使用达到阈值的时候,所有引起申请内存的命令会报错。

allkeys-lru:在主键空间中,优先移除最近未使用的key。(推荐)

volatile-lru:在设置了过期时间的键空间中,优先移除最近未使用的key。

allkeys-random:在主键空间中,随机移除某个key。

volatile-random:在设置了过期时间的键空间中,随机移除某个key。

volatile-ttl:在设置了过期时间的键空间中,具有更早过期时间的key优先移除。

如何配置淘汰策略?

在redis.conf文件中, 设置Redis 内存大小的限制,我们可以设置maxmemory ,当数据达到限定大小后,会选择配置的策略淘汰数据。

比如:maxmemory 300mb。

通过配置 maxmemory-policy 设置Redis的淘汰策略。比如:maxmemory-policy volatile-lru

Redis中的自动过期机制

首先需要配置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中的事务操作

Multi 开启事务

EXEC 提交事务

Watch 可以监听一个或者多个key,在提交事务之前是否有发生了变化 如果发生边了变化就不会提交事务,没有发生变化才可以提交事务 版本号码 乐观锁

Discard 取消提交事务

注意:Redis官方是没有提供回滚方法,只提供了取消事务。

Redis中本身就是单线程的能够保证线程安全问题,不需要考虑线程安全问题。

取消事务跟回滚有什么区别呢?为什么redis不支持回滚事务?

Mysql中开启了事务,对该行数据上行锁—,Commit 数据可以提交

回滚:对事务取消和行锁都会撤销

Redis没有回滚事务的概念,单纯取消事务(不提交事务) 不上锁

watch和Multi的区别

Watch相当于乐观锁,在事务提交之前没有发生变化才可以提交事务。

Multi 就是开启事务,操作数据之后可以提交事务或者取消提交事务。

到此这篇关于Redis深入了解内存淘汰与事务操作的文章就介绍到这了,更多相关Redis内存淘汰与事务操作内容请搜索易知道(ezd.cc)以前的文章或继续浏览下面的相关文章希望大家以后多多支持易知道(ezd.cc)!

推荐阅读

    redis密码设置|如何设置redis密码

    redis密码设置|如何设置redis密码,,如何设置redis密码初始化Redis密码: 在配置文件中有个参数: requirepass 这个就是配置redis访问密码的

    Redis集群批量操作

    Redis集群批量操作,节点,集群,Redis在3.0版正式引入了集群这个特性,扩展变得非常简单。然而当你开心的升级到3.0后,却发现有些很好用的功能

    redis sentinel模式命令集

    redis sentinel模式命令集,状态,频道, ping 订阅模式:ping 服务器回复:*2$4pong$0ping xxx 服务器回复:*2$4pong$3xxx其他模式ping 服

    C# 基于StackExchange.Redis.dll利用Redis实现分布式Session

    C# 基于StackExchange.Redis.dll利用Redis实现分布式Session,令牌,客户端,最近在研发一款O2O产品,考虑到分布式架构的需要,以前那一套.NET的

    REDIS|11 redis做分页

    REDIS|11 redis做分页,分页,每页,之前的数据都加载到了本地java的Map,分页如下@RequestMapping("/articles")String articles(Model mode

    softwaredistribution是什么文件夹

    softwaredistribution是什么文件夹,升级,存放,更新日志,文件,补丁下载,删除,softwaredistribution在Windows目录下,主要是用来存放WINDOWS UPDAT

    数据库事务隔离级别有哪些

    数据库事务隔离级别有哪些,数据,提交,隔离级别,丢失,更新,操作,数据库事务隔离级别:1、Read Uncommitted(读未提交);2、Read Committed(读已提交);3、R