redis里能不能针对set数据的每个member设置过期时间

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis里能不能针对set数据的每个member设置过期时间相关的知识,希望对你有一定的参考价值。

参考技术A 不能。

因为过期时间是针对key来设置的。
其他变相实现:redis里有个有序set,你可以把时间作为排序的分值,自己写程序定时按时间删除zset中的member。
或者按时间定义多个key,再对key设置过期时间。

set操作

 

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)

 

1.向集合添加一个或多个成员SADD key member1 [member2] 

2.获取集合的成员数 SCARD key

3.判断 member 元素是否是集合 key 的成员SISMEMBER key member 

4.返回集合中的所有成员SMEMBERS key 

5.移除集合中一个或多个成员SREM key member1 [member2] 

6.移除并返回集合中的一个随机元素SPOP key count

7.返回给定所有集合的差集SDIFF key1 [key2] 

8.返回所有给定集合的并集SUNION key1 [key2] 

9.返回给定所有集合的交集SINTER key1 [key2] 

 

set代码操作:

package com.study.util;

import java.util.Set;

import redis.clients.jedis.Jedis;

public class RedisSet {

    public static void main(String[] args) {
        Jedis jedis = RedisUtil.getJedis();
        
        //想集合set中添加a,b,c,d,e,f
        jedis.sadd("set", "a","b","c","d","e","f");
        //获取set集合元素
        Set<String> valueList = jedis.smembers("set");
        System.out.print("set集合元素:");
        for (String value : valueList) {
            System.out.print(value);
        }
        System.out.println();
        
        //获取set集合的成员数量
        long length = jedis.scard("set");
        System.out.println("set集合的成员数量:"+length);
        
        //判断字符串b和g是否存在集合set中
        boolean bflag = jedis.sismember("set", "b");
        System.out.println("b是否存在集合set中:" + bflag);
        boolean gflag = jedis.sismember("set", "g");
        System.out.println("g是否存在集合set中:" + gflag);
        
        //移除集合set中的元素a b
        jedis.srem("set", "a","b");
        valueList = jedis.smembers("set");
        System.out.print("移除后set集合元素:");
        for (String value : valueList) {
            System.out.print(value);
        }
        System.out.println();
        
        //随机移除集合set的一个元素并返回
        String popValue = jedis.spop("set");
        System.out.println("随机移除的元素为:" + popValue);
        valueList = jedis.smembers("set");
        System.out.print("随机移除后set集合元素:");
        for (String value : valueList) {
            System.out.print(value);
        }
        System.out.println();
        
        //向集合set1中添加d i j k
        jedis.sadd("set1", "d","i","j","k");
        //获取set集合与set1集合的差集
        Set<String> diffSet =jedis.sdiff("set","set1");
        System.out.println("set集合与set1集合的差集:");
        for (String value : diffSet) {
            System.out.print(value);
        }
        System.out.println();
        
        //获取set集合与set1集合的并集
        Set<String> unionSet =jedis.sunion("set","set1");
        System.out.println("set集合与set1集合的并集:");
        for (String value : unionSet) {
            System.out.print(value);
        }
        System.out.println();
        
        //获取set集合与set1集合的交集
        Set<String> interSet =jedis.sinter("set","set1");
        System.out.println("set集合与set1集合的交集:");
        for (String value : interSet) {
            System.out.print(value);
        }
        System.out.println();
        
        jedis.close();
    }
}
View Code

 

代码git地址:https://gitee.com/sjcq/redis.git

 

以上是关于redis里能不能针对set数据的每个member设置过期时间的主要内容,如果未能解决你的问题,请参考以下文章

redis里能不能针对set数据的每个member设置过期时间

set操作

redis的mset可以像set一样设置过期时间吗

Redis的有序集合操作命令

redis 集合 set操作命令

redis中hset能否设置有效时间