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();