• redisTemplate方法操作redis


    最近项目做完了,发现redis教程看了不少,但是在redisTemplate还是有好多方法没怎么用过,在此学习记录下来。老版本的 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。 这里也只说明这五种数据类型操作。

    String操作

    ​ Redis 字符串数据类型的相关命令用于管理 redis 字符串值

    //        获取值
            redisTemplate.opsForValue().get();
            redisTemplate.opsForValue().multiGet();
    //        设置值
            redisTemplate.opsForValue().set("stone","demo",10, TimeUnit.SECONDS);
            HashMap<String, Object> sets = new HashMap<>();
            sets.put("test1","stone1");
            sets.put("test2","stone2");
            sets.put("test3","stone3");
            redisTemplate.opsForValue().multiSet(sets);
    //        删除值
            redisTemplate.delete();
    //        原子操作
            redisTemplate.opsForValue().increment();
    

    List操作

    ​ Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

    ​ 一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

            /**
             * List操作
             */
    //        获取所有list值
            List<Object> lTest = redisTemplate.opsForList().range("lTest", 0,-1);
            Long aLong = redisTemplate.opsForList().leftPushAll("lTest", "value1", "value2", "value3", "value4");
    //        在链表左端添加一个元素
            redisTemplate.opsForList().leftPush();
    //        更新链表某个节点的值
            redisTemplate.opsForList().set();
    //        删除队列左边第一个元素并返回
            /**
             * 进程永久堵塞,直到有值塞入
             *
             * Removes and returns first element from lists stored at {@code key} . <br>
             * 	 * <b>Blocks connection</b> until element available or {@code timeout} reached.
             */
            redisTemplate.opsForList().leftPop("lTest",0,TimeUnit.SECONDS);
    //        不会等待
            redisTemplate.opsForList().leftPop("lTest");
    

    Set操作

    ​ Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

    集合对象的编码可以是 intset 或者 hashtable。

    ​ Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

    集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

             /**
             * set操作       多个集合的交并集操作
             */
    //        获取set值
            redisTemplate.opsForSet().members("setTest");
    //        添加值
            redisTemplate.opsForSet().add("setTest","test1","test2","test3","test4","test1");
            redisTemplate.opsForSet().add("setTest2","test1","test2","test3","test4","test1");
    //        还有很多对比set集合,取出交并集合等操作
            Set<Object> setTest1 = redisTemplate.opsForSet().difference("setTest","setTest2");
            redisTemplate.opsForSet().intersect();
    //        删除
            redisTemplate.opsForZSet().remove();
    
    

    ZSet操作

    ​ Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。

    不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。

    ​ 有序集合的成员是唯一的,但分数(score)却可以重复。

    ​ 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

            /**
             * zset操作   针对zset设置的score进行操作
             */
    //        获取
            Set<Object> zsetTest = redisTemplate.opsForZSet().range("zsetTest", 10, 10);
    //        还有很多通过score来获取值得操作
    //        添加
            redisTemplate.opsForZSet().add();
            Set<ZSetOperations.TypedTuple<Object>> sets = new HashSet<>();
            sets.add(new DefaultTypedTuple("test1",10d));
            sets.add(new DefaultTypedTuple("test2",10d));
            sets.add(new DefaultTypedTuple("test3",10d));
            redisTemplate.opsForZSet().add("zsetTest",sets);
    //        删除
            redisTemplate.opsForZSet().remove();
    
    

    Map操作

    ​ Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。

    ​ Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。

            /**
             * map操作     作用单纯map存取值+原子操作
             */
    //        获取
            redisTemplate.opsForHash().get();
            redisTemplate.opsForHash().multiGet();
    //        添加
            redisTemplate.opsForHash().put();
    //        删除
            redisTemplate.opsForHash().delete();
    //        原子操作
            redisTemplate.opsForHash().increment();
    
  • 相关阅读:
    【已解决】Makefile执行过程中出错:make: *** No rule to make target ` ‘, needed by xxx. Stop(转载)
    eclipse导入工程报Invalid project description(转载)
    基于Linux的v4l2视频架构驱动编写(转载)
    在eclipse中如何在大量项目中查找指定文件(转载)
    Ubuntu下FileZilla的安装(转载)
    创建 /dev/video0 节点 (转载)
    python函数-迭代器&生成器
    前端第三篇---前端基础之JavaScript
    前端第二篇---前端基础之CSS
    块级元素和行内元素使用心得汇总
  • 原文地址:https://www.cnblogs.com/theStone/p/16016910.html
Copyright © 2020-2023  润新知