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();
posted @ 2022-03-17 13:49  站在巨人肩上的人  阅读(2525)  评论(0编辑  收藏  举报