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

 更新时间:2022年07月28日 09:09:12   作者:kaico2018  
将Redis用作缓存时,Redis数据存在内存中,如果内存空间用满,就会自动驱逐老的数据。Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断

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内存淘汰与事务操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Redis Cluster 集群搭建你会吗

    Redis Cluster 集群搭建你会吗

    这篇文章主要介绍了Redis Cluster 集群搭建过程,本文分步骤通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • Redis执行Lua脚本的好处与示例代码

    Redis执行Lua脚本的好处与示例代码

    Redis在2.6推出了脚本功能,允许开发者使用Lua语言编写脚本传到Redis中执行。下面这篇文章主要给大家介绍了关于Redis执行Lua脚本的好处与示例代码,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-10-10
  • Redis的setNX分布式锁超时时间失效 -1问题及解决

    Redis的setNX分布式锁超时时间失效 -1问题及解决

    这篇文章主要介绍了Redis的setNX分布式锁超时时间失效 -1问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • Redis拒绝连接问题分析与解决方案

    Redis拒绝连接问题分析与解决方案

    在分布式系统中,Redis作为高性能的内存数据库,广泛用于缓存、消息队列、会话管理等场景,然而,随着系统复杂度和并发量的增加,Redis连接问题时有发生,尤其是"拒绝连接"的错误,本文将深入分析Redis拒绝连接的常见原因,并详细讲解每种原因的解决方案
    2024-10-10
  • IDEA中的Redis插件连接Redis服务器

    IDEA中的Redis插件连接Redis服务器

    本文主要介绍了IDEA中的Redis插件连接Redis服务器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • RedisTemplate常用操作方法总结(set、hash、list、string等)

    RedisTemplate常用操作方法总结(set、hash、list、string等)

    本文主要介绍了RedisTemplate常用操作方法总结,主要包括了6种常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • 让Redis在你的系统中发挥更大作用的几点建议

    让Redis在你的系统中发挥更大作用的几点建议

    Redis在很多方面与其他数据库解决方案不同:它使用内存提供主存储支持,而仅使用硬盘做持久性的存储;它的数据模型非常独特,用的是单线程。另一个大区别在于,你可以在开发环境中使用Redis的功能,但却不需要转到Redis
    2014-06-06
  • 使用Redis命令操作数据库的常见错误及解决方法

    使用Redis命令操作数据库的常见错误及解决方法

    由于Redis是内存数据库,因此可能会存在一些安全问题,下面这篇文章主要给大家介绍了关于使用Redis命令操作数据库的常见错误及解决方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-02-02
  • Windows下安装Redis服务的图文教程

    Windows下安装Redis服务的图文教程

    Redis是有名的NoSql数据库,一般Linux都会默认支持。但在Windows环境中,可能需要手动安装设置才能有效使用。下面通过本文给大家介绍Windows下安装Redis服务的图文教程,感兴趣的朋友一起看看吧
    2018-08-08
  • redis 解决key的乱码问题,并清理详解

    redis 解决key的乱码问题,并清理详解

    这篇文章主要介绍了redis 解决key的乱码问题,并清理详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07

最新评论