RedisTemplate使用

文章目录

RedisTemplate使用

String类型

java 复制代码
    @Override
    public void testString() {
        // t11();
        String key = "k1";
        String currentNum;
        // 用法1:key是否存在
        Boolean value = client.hasKey(key);
        log.info("[{}]是否存在[{}]", key, value);
        // 用法2:添加元素
        client.opsForValue().set(key, "v1", DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);
        // 用法3:获取元素
        String getValue = client.opsForValue().get(key);
        log.info("getValue : [{}]", getValue);
        // 用法4:计数
        String counter = "counter:key";
        client.opsForValue().set(counter, "0", DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);
        client.opsForValue().increment(counter);
        client.opsForValue().increment(counter);
        currentNum = client.opsForValue().get(counter);
        log.info("currentNum : [{}]", currentNum);
        client.opsForValue().decrement(counter);
        currentNum = client.opsForValue().get(counter);
        log.info("currentNum : [{}]", currentNum);

        // 用法5:存储list<map>结构数据
        List<Map<String, String>> multiMapList = Lists.newArrayList();
        for (int i = 0; i < 5; i++) {
            LinkedHashMap<String, String> itemMap = Maps.newLinkedHashMap();
            itemMap.put("name", "jack" + i);
            if (i % 2 == 0) {
                itemMap.put("age", String.valueOf(10 + i));
                itemMap.put("sex", "男");
            } else {
                itemMap.put("age", String.valueOf(11 + i));
                itemMap.put("sex", "女");
            }
            multiMapList.add(itemMap);
        }
        String multiMapStr = JSON.toJSONString(multiMapList);
        client.opsForValue().set("str:multiusers", multiMapStr, DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);
        String userList = client.opsForValue().get("str:multiusers");
        List<Map<String, String>> maps = CastBeanUtil.castListMap(JSON.parse(userList), String.class, String.class);
        log.info("maps : [{}]", maps);

        // 用法6:存储list<entity>
        List<TzArea> areaList = Lists.newArrayList();
        for (int i = 0; i < 10; i++) {
            TzArea item = new TzArea();
            item.setAreaId((long) i);
            item.setAreaName("江苏省");
            item.setLevel(1);
            item.setParentId(1L);
            areaList.add(item);
        }

        client.opsForValue().set("str:multiareas", JSON.toJSONString(areaList), DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);
        String res = client.opsForValue().get("str:multiareas");
        List<TzArea> tzAreas = JSON.parseArray(res, TzArea.class);
        log.info("tzAreas : [{}]", JSON.toJSONString(tzAreas));


    }

Hash类型

java 复制代码
@Override
    public void testHash() {
        // 用法1:添加一个字段
        client.opsForHash().put("hash:user:single", "name", "pmb");
        client.expire("user", DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);
        Map<Object, Object> result = client.opsForHash().entries("hash:user:single");
        log.info("result : [{}]", result);
        // 用法2:添加一个对象信息
        Map<Object, Object> handleMap = Maps.newLinkedHashMap();
        handleMap.put("name", "jack");
        handleMap.put("age", "18");
        handleMap.put("sex", "男");
        String key = "hash:user:all";
        client.opsForHash().putAll(key, handleMap);
        Map<Object, Object> allElements = client.opsForHash().entries(key);
        log.info("allElements : [{}]", allElements);
        // 用法3:只获取map中key集合
        Set<Object> keyList = client.opsForHash().keys(key);
        log.info("keyList : [{}]", keyList);
        // 用法4:只获取map中value集合
        List<Object> valueList = client.opsForHash().values(key);
        log.info("valueList : [{}]", valueList);
    }

List类型

java 复制代码
    @Override
    public void testList() {
        // 用法1:顺序添 加元素1,2,3,4
        // rightPush 列表右侧添加元素
        String key = "list:phoneList";
        client.opsForList().rightPush(key, "16607024161");
        client.opsForList().rightPush(key, "16607024162");
        client.opsForList().rightPush(key, "16607024163");
        client.expire(key, DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);
        // 删除元素
        client.opsForList().rightPop(key);
        // 元素个数
        Long size = client.opsForList().size(key);
        assert size !=null;
        log.info(SIZE_FORMAT, size);
        // 查找元素
        // index 查找指定下标的元素 下标从0开始,最后一个size-1
        String firstItem = client.opsForList().index(key, 0);
        log.info("firstItem : [{}]", firstItem);
        String secondItem = client.opsForList().index(key, 1);
        log.info("secondItem : [{}]", secondItem);
        String thirdItem = client.opsForList().index(key, 2);
        log.info("thirdItem : [{}]", thirdItem);
        // list中所有元素
        List<String> res = client.opsForList().range(key, 0, size - 1);
        log.info("res : [{}]", res);
        // 修改制定位置数据
        client.opsForList().set(key, 0, "12");
        // 实现栈 先进后出
        client.opsForList().leftPush(key, "1");
        client.opsForList().leftPush(key, "2");
        client.opsForList().leftPush(key, "3");
        client.opsForList().leftPop(key);
        client.opsForList().leftPop(key);
        client.opsForList().leftPop(key);
       
        // 实现队列 先进先出
        client.opsForList().leftPush(key, "one");
        client.opsForList().leftPush(key, "two");
        client.opsForList().rightPop(key);
        client.opsForList().rightPop(key);
    }

Set类型

java 复制代码
   @Override
    public void testSet() {
        String key = "set:nums";
        // 用法1:添加元素
        client.opsForSet().add(key, "1", "2", "3");
        client.expire(key, DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);
        //用法2:获取集合的元素
        Set<String> members = client.opsForSet().members(key);
        log.info("members : [{}]", members);
        // 用法3:判断某个元素是否存在
        Boolean member = client.opsForSet().isMember(key, "2");
        log.info("member : [{}]", member);
        String intersection = "set:nums:intersection";
        // 用法4:交集
        client.opsForSet().add(intersection, "1", "2");
        client.expire(intersection, DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);
        Set<String> intersectList = client.opsForSet().intersect(key, intersection);
        log.info("intersectList : [{}]", intersectList);
        // 用法5:并集
        Set<String> unionList = client.opsForSet().union(key, intersection);
        log.info("unionList : [{}]", unionList);
        // 用法6:查集
        Set<String> differenceList = client.opsForSet().difference(key, intersection);
        log.info("differenceList : [{}]", differenceList);


    }

Zset类型

java 复制代码
  @Override
    public void testZset() {
        String key = "zset:nums";
        // 用法1:添加元素
        client.opsForZSet().add(key, "one", 1);
        client.opsForZSet().add(key, "three", 30);
        client.opsForZSet().add(key, "two", 20);
        client.opsForZSet().add(key, "four", 44);
        client.opsForZSet().add(key, "five", 55);
        client.expire(key, DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);
        // 用法2:返回指定元素排名
        Long one = client.opsForZSet().rank(key, "five");
        log.info("rank : [{}]", one);
        Long size = client.opsForZSet().size(key);
        assert size !=null;
        log.info(SIZE_FORMAT, size);
        // 用法3:返回指定区间元素
        Set<String> range = client.opsForZSet().range(key, 0, size - 1);
        log.info("range : [{}]", range);
        // 用法4:指定分数区间用户
        Set<String> userList = client.opsForZSet().rangeByScore(key, 1, 60);
        log.info("userList : [{}]", userList);
        // 用法5:移除一个或者多个元素
        client.opsForZSet().remove(key, "two");
        log.info(SIZE_FORMAT, client.opsForZSet().size(key));
        // 用法6:计算指定分数之间用户个数
        Long count = client.opsForZSet().count(key, 1, 20);
        log.info("count : [{}]", count);
        Set<String> invertedOrder = client.opsForZSet().reverseRange(key, 0, -1);
        log.info("InvertedOrder : [{}]", invertedOrder);
        // 用法7:显示所有成员score以及对应用户
        Set<ZSetOperations.TypedTuple<String>> allLis = client.opsForZSet().rangeWithScores(key, 0, -1);
        assert allLis != null;
        for (ZSetOperations.TypedTuple<String> next : allLis) {
            String value = next.getValue();
            Double score = next.getScore();
            log.info("通过rangeWithScores(K key, long start, long end)方法获取RedisZSetCommands.Tuples的区间值:[{}],[{}]", value, score);
        }

        // 用法8:相同score返回处理,取值第一个
        String lexKey = "zset:lex";
        client.delete(lexKey);
        client.opsForZSet().add(lexKey, "zs", 55);
        client.opsForZSet().add(lexKey, "ls", 55);
        client.opsForZSet().add(lexKey, "ww", 54);
        client.opsForZSet().add(lexKey, "zl", 55);
        client.expire(lexKey, DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);
        // 取出score集合
        Set<ZSetOperations.TypedTuple<String>> typedTuples = client.opsForZSet().rangeWithScores(lexKey, 0, -1);
        if(Objects.isNull(typedTuples)){
            throw new IllegalArgumentException("出现异常了");
        }
        Map<String, Double> cachedMap = new ConcurrentHashMap<>(16);
        Iterator<ZSetOperations.TypedTuple<String>> scoreIterator = typedTuples.iterator();
        String firstUser = null;
        while (scoreIterator.hasNext()) {
            ZSetOperations.TypedTuple<String> item = scoreIterator.next();
            Double score = item.getScore();
            String value = item.getValue();
            if (cachedMap.containsValue(score)) {
                // 找到重复score
                firstUser = value;
            }
            cachedMap.put(value, score);
        }
        log.info("firstUser : [{}]", firstUser);

       
    }
相关推荐
蟾宫曲21 分钟前
Node.js 工具:在 Windows 11 中配置 Node.js 的详细步骤
windows·npm·node.js·前端工具
花姐夫Jun35 分钟前
在 CentOS 8 系统上安装 Jenkins 的全过程
linux·centos·jenkins
是店小二呀1 小时前
【Linux】Linux开发利器:make与Makefile自动化构建详解
linux·运维·自动化
BUG 4042 小时前
LINUX--shell
linux·运维·服务器
菜鸟小白:长岛icetea2 小时前
Linux零基础速成篇一(理论+实操)
linux·运维·服务器
深海的鲸同学 luvi2 小时前
【HarmonyOS NEXT】hdc环境变量配置
linux·windows·harmonyos
dowhileprogramming2 小时前
Python 中的迭代器
linux·数据库·python
过过过呀Glik2 小时前
在 Ubuntu 服务器上添加和删除用户
linux·服务器·ubuntu
Ainnle3 小时前
微软 CEO 萨提亚・纳德拉:回顾过去十年,展望 AI 时代的战略布局
人工智能·microsoft
Tesseract_95274 小时前
ioctl回顾
linux