首页 > 数据库 >redis队列 Redis存储/取尽值,获取最新值

redis队列 Redis存储/取尽值,获取最新值

时间:2022-09-06 17:00:19浏览次数:84  
标签:return String redis Redis list key data 取尽 redisTemplate

 /**
     * 取尽存储的值,获取最新值
     *
     * @param key
     * @return
     */
    @Override
    public String popData(String key) {
        List<String> list = new ArrayList<>();
        String popDataKey = RedisKeyPrefix.getPopDataKey(key);
        // 同步锁
        boolean lockStatus = redisTemplate.opsForValue().setIfAbsent(popDataKey, 1, 5, TimeUnit.SECONDS);
        if (!lockStatus) {
            return null;
        }
        while (redisTemplate.hasKey(key)) {
            Object data = redisTemplate.opsForList().leftPop(key);
            if (data != null) {
                list.add(data.toString());
            }
        }
        redisTemplate.delete(popDataKey);
        if (CollectionUtils.isEmpty(list)) {
            return null;
        }
        return list.get(list.size() - 1);
    }

 

 

 // 存储值
public void pushData(String key, String value) {
        redisTemplate.opsForList().rightPush(key, value);
    }

 

 // 取尽存储的值
public List<String> popAllData(String key) {
        List<String> list = new ArrayList<>();
        while (redisTemplate.hasKey(key)) {
            Object data = redisTemplate.opsForList().leftPop(key);
            if (data != null) {
                list.add(data.toString());
            }
        }
        return list;
    }

 

// CURD

    /**
     * 新增或更新
     *
     * @param key
     * @param value
     */
    public void setOrUpdateData(String key, String value) {
        redisTemplate.opsForValue().set(key, value);
    }


    /**
     * 获取值
     *
     * @param key
     * @return
     */
    public String getData(String key) {
        return (String) redisTemplate.opsForValue().get(key);
    }

    /**
     * 批量删除
     *
     * @param key 前缀
     */
    public void deleteData(String key) {
        redisTemplate.delete(redisTemplate.keys(key + "*"));

    }

 

标签:return,String,redis,Redis,list,key,data,取尽,redisTemplate
From: https://www.cnblogs.com/axibug/p/16662453.html

相关文章

  • 【重复造轮子】基于Redis的RateLimiter
    造轮子的过程也是学习的过程。如果公司的Redis不支持发布订阅指令的话,是没法用Redisson的,因为Redisson的大部分功能都依赖于Redis的发布订阅指令。这是完整实现......
  • Redis脑裂问题 和 处理办法
    背景假设现在有三台机器,分别安装了redis服务,结构如图故障发生:如果此时master服务器所在区域网络通信出现异常,导致和两台slave机器无法正常通信,但是和客户端的连接是正常......
  • 新增一个Redis 从节点为什么与主节点的key数量不一样呢?
    在日常的Redis运维过程中,经常会发生重载RDB文件操作,主要情形有:主从架构如果主库宕机做高可用切换,原从库会挂载新主库重新获取数据主库QPS超过10万,需要做读写分离,......
  • 最新一线大厂Redis使用21条军规及详细解读
    说明:个人原创,本人在一线互联网大厂维护着几千套集群,关于redis使用的一些坑进行了经验总结,希望能给大家带来一些帮助适用场景:并发量大、访问量大的业务规范:介绍军规内......
  • Redis的高可用Sentinel
    Redis的高可用Sentinel什么是SentinelRedis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的......
  • Redis总结
    Redis底层数据结构当数据量小,通过数组实现的压缩数据结构用下标访问更快;当数据量大,维护数组的元数据占用空间随之增长,所以使用普通存储redis支持<string,valu......
  • 【转】spring-session-data-redis核心原理
    这个组件的核心本质就是在实现单点登录SSO问题,将用户的登录session信息从原来的存储在jvm中转移到redis中去,微服务架构下每个应用接到请求都不会从自己的节点解析用户登录......
  • 11-redis集群
    redis集群搭建#搭建三主三从redis集群#redis5.0提供了集群快速搭建#修改脚本文件:redis/utils/create-cluster目录下的create-cluster脚本文件--bind$IP--mast......
  • redis分布锁
    1.redis分布式锁应用的场景?1)防止缓存穿透:热点数据过期,大量线程访问mysql2) 防止秒杀超卖:库存数量同步给redis后,对redis数据进行扣减3)双写一致性:缓存的数据,被修改,导致......
  • redis面试题2
    1、现在有个场景,一个key内容很大(几十M),一个key是热点,你如何优化?2、如何优雅的删除这个大key?3、redis的存储结构?4、实现map的方法除了哈希还有哪些?5、redis的setnx底层怎......