【Redis 缓存的生命周期】

设置key的存活时间

1.使用Jedis库来设置Redis中Key的存活时间(即过期时间),可以使用setex方法。这个方法可以同时设置Key的值和过期时间,确保在一定时间后自动将Key删除或标记为过期状态。

import redis.clients.jedis.Jedis;

public class RedisCacheExample {

    public static void main(String[] args) {
        // 连接本地的Redis服务
        Jedis jedis = new Jedis("localhost", 6379);

        // 设置一个Key的值,并设置过期时间为60秒
        jedis.setex("mykey", 60, "myvalue");

        // 关闭连接
        jedis.close();
    }
}

设置成功后,Redis会在60秒后自动将Key mykey 删除或标记为过期状态。
如果未显式设置过期时间,则Key将永远存在,除非显式删除或Redis服务重启。
通过这种方式,可以方便地在Java应用程序中对Redis中的Key设置自动过期,从而实现缓存的自动管理和失效策略。

2.使用expire和pexpire方法,它们分别用于设置以秒和毫秒为单位的过期时间。

import redis.clients.jedis.Jedis;

public class RedisSetTTL {
    public static void main(String[] args) {
        // 创建Jedis实例,连接到本地的Redis服务
        Jedis jedis = new Jedis("localhost", 6379);

        try {
            // 设置key的值
            String key = "exampleKey";
            String value = "exampleValue";
            jedis.set(key, value);

            // 设置key的存活时间为10秒
            long ttlInSeconds = 10L;
            jedis.expire(key, (int) ttlInSeconds);

            // 设置key的存活时间为10000毫秒
            long ttlInMillis = 10000L;
            jedis.pexpire(key, (int) ttlInMillis);

            // 检查key的剩余存活时间
            long remainingTTL = jedis.ttl(key);
            System.out.println("Remaining TTL: " + remainingTTL + " seconds");

            // 检查key是否存在
            boolean exists = jedis.exists(key);
            System.out.println("Key exists: " + exists);

        } finally {
            // 关闭Jedis连接
            jedis.close();
        }
    }
}

注意,expire方法接收一个整型参数表示过期时间(以秒为单位),而pexpire方法也接收一个整型参数但是表示过期时间是以毫秒为单位。在这个例子中,我们先使用expire方法设置过期时间,然后又使用pexpire方法覆盖之前的设置。由于pexpire是在expire之后调用的,因此实际上生效的是pexpire设置的过期时间。

Redis 未设定生存时间 默认是多久

在Redis中,如果你创建一个Key并未显式地为它设置生存时间(过期时间),那么这个Key将会永远存在,直到你显式地删除它或者Redis服务重新启动。

默认的生存时间:
当你使用Redis的SET命令或者SETEX命令设置Key的值时,并没有设置生存时间,那么这个Key将不会自动过期。Redis的数据存储策略会持续保留这些Key,直到它们被显式地删除或者Redis服务重启。

这种行为非常适合那些需要持久存储数据的场景,比如持久化用户会话、全局配置信息等。因此,如果你希望Key在一段时间后自动过期,需要显式地使用EXPIRE或EXPIREAT命令来设置Key的过期时间。

import redis.clients.jedis.Jedis;

public class RedisExample {

    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost", 6379);

        // 设置一个Key的值,但没有设置生存时间
        jedis.set("mykey", "myvalue");

        // 关闭连接
        jedis.close();
    }
}

mykey将会一直保持在Redis中,直到你显式地使用DEL命令删除它或者Redis服务重启。

如何判断Redis缓存是否过期

在Redis中,可以通过以下几种方式来判断缓存是否过期:

  • TTL命令:使用TTL命令可以获取Key的剩余生存时间(Time To Live)。返回值为整数,表示Key的剩余生存时间(秒),-2表示Key不存在,-1表示Key存在但没有设置过期时间。

  • PTTL命令:与TTL类似,但返回的是以毫秒为单位的剩余生存时间。

  • Exists命令:使用Exists命令可以检查Key是否存在,如果Key不存在,则认为已经过期。

import redis.clients.jedis.Jedis;

public class RedisCacheExample {

    public static void main(String[] args) {
        // 连接本地的Redis服务
        Jedis jedis = new Jedis("localhost", 6379);

        // 设置一个Key的值,并设置过期时间为60秒
        jedis.setex("mykey", 60, "myvalue");

        // 判断Key是否存在并获取剩余生存时间(秒)
        long ttl = jedis.ttl("mykey");

        if (ttl == -2) {
            System.out.println("Key不存在");
        } else if (ttl == -1) {
            System.out.println("Key存在但没有设置过期时间");
        } else {
            System.out.println(" 'mykey' 剩余生存时间: " + ttl + " seconds");
        }

        // 关闭连接
        jedis.close();
    }
}

使用ttl方法获取Key mykey 的剩余生存时间(秒),并根据返回值判断Key的状态。
返回值 -2 表示Key不存在。
返回值 -1 表示Key存在但没有设置过期时间。
其他正整数表示Key的剩余生存时间(秒)。

重启redis服务时 原有的永不过期的key是否还会存在

当Redis服务重启时,原有的永不过期的key是否会继续存在取决于Redis的持久化配置。Redis支持两种持久化机制:RDB(Redis Database Backup)和AOF(Append Only File)。

RDB 持久化
RDB是Redis默认的持久化方式,它会在一定条件下将内存中的数据快照写入磁盘上的一个RDB文件中。当Redis重启时,它会从最新的RDB文件中恢复数据。如果在Redis重启前,RDB文件已经被创建,并且包含了那些永不过期的key,那么在重启后,这些key仍然会存在。

AOF 持久化
AOF持久化记录了所有写入Redis数据库的写指令,当Redis重启时,会重新执行AOF文件中的所有写指令来恢复数据。如果永不过期的key在AOF持久化开启的情况下被设置,那么即使Redis重启,这些key也会通过重放AOF文件中的写指令得以恢复。

结论
只要在Redis重启前,永不过期的key已经被持久化到RDB文件或AOF文件中,那么在Redis重启后,这些key将会继续存在。如果Redis没有配置任何持久化,或者持久化配置没有正常工作(例如,没有达到触发RDB持久化的条件,或者AOF持久化被禁用),那么在重启后,这些key可能就不存在了。

为了确保数据在重启后仍然存在,你应该确保至少一种持久化机制被正确配置和工作。在生产环境中,通常会同时启用RDB和AOF,以提供更好的数据安全性和恢复能力。

  • 27
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis是一款开源的内存数据库,可以用于缓存各种类型的数据,包括字典数据。使用Redis缓存字典数据有以下几个好处: 首先,Redis的内存读写速度非常快,相较于传统的数据库,访问Redis的速度更快。这使得使用Redis缓存字典数据可以显著提高应用程序的性能和响应速度。 其次,Redis支持持久化功能,可以将缓存的字典数据保存到硬盘上。这样即使服务器重启或者发生故障,也不会丢失缓存的数据,可以保证数据的可靠性和持久性。 再次,Redis提供了一些高级数据结构和功能,如SortedSet和Hash。这些数据结构可以非常方便地用于存储和查询字典数据。例如,可以使用Hash数据结构将字典数据按照字段存储,可以直接通过字段名进行快速的数据查询和更新操作。 此外,Redis具有良好的扩展性。可以通过集群方式部署多个Redis服务器,实现高可用性和负载均衡。这样即使有大量的字典数据需要缓存,也可以通过横向扩展的方式满足需求,保证系统的可伸缩性和稳定性。 最后,Redis还提供了丰富的命令和API,可以方便地操作缓存的字典数据。可以通过设置过期时间、设置缓存策略等来控制缓存生命周期和数据的更新机制,灵活地应对不同的业务需求。 综上所述,使用Redis缓存字典数据可以提升应用程序的性能和响应速度,确保数据的可靠性和持久性,提供方便的操作和扩展方式,满足不同的业务需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值