一、RedisTemplate的操作
Common
(1)haskey
Boolean result = redisTemplate.hasKey("a");
System.out.println(result);
(2)getExpire
redisTemplate.opsForValue().set("a","aa");
Long a = redisTemplate.getExpire("a");
System.out.println(a);
System.out.println(redisTemplate.getExpire("a", TimeUnit.MINUTES));
(3)delete
redisTemplate.opsForValue().set("a","aa");
Boolean result = redisTemplate.delete("f");
System.out.println(result);
(4)dump
redisTemplate.opsForValue().set("a","aa");
byte[] as = redisTemplate.dump("a");
System.out.println(as);
(5)randomKey
redisTemplate.opsForValue().set("a","aa");
String s = redisTemplate.randomKey();
System.out.println(s);
(6)type
redisTemplate.opsForValue().set("a","aa");
DataType a = redisTemplate.type("a");
System.out.println(a);
(7)rename
redisTemplate.opsForValue().set("a","aa");
redisTemplate.rename("a","b");
System.out.println(redisTemplate.opsForValue().get("a"));
System.out.println(redisTemplate.opsForValue().get("b"));
(8)move
redisTemplate.opsForValue().set("a","aa");
Boolean result = redisTemplate.move("a", 2);
System.out.println(result);
(9)persist
redisTemplate.opsForValue().set("a","aa");
Boolean result = redisTemplate.persist("a");
System.out.println(result);
1.String
(1)设置值
redisTemplate.opsForValue().set("a","abcd");
redisTemplate.opsForValue().getAndSet("f", "fff");
(2)获取值
redisTemplate.opsForValue().set("a","abcd");
Object a = redisTemplate.opsForValue().get("a");
System.out.println(redisTemplate.opsForValue().get("f", 0, 8));
(3)过期时间设置
redisTemplate.opsForValue().set("b","2",1, TimeUnit.SECONDS);
redisTemplate.opsForValue().set("b","2");
redisTemplate.expire("b", 2, TimeUnit.SECONDS);
redisTemplate.opsForValue().get("b");
redisTemplate.getExpire("b");
redisTemplate.getExpire("b", TimeUnit.MINUTES);
(4)自增、自减
redisTemplate.opsForValue().set("c",1);
redisTemplate.opsForValue().increment("c", 2);
redisTemplate.opsForValue().decrement("c", 3);
(5)批量自增、自减
Map map = new HashMap();
map.put("d", "1");
map.put("e", "2");
redisTemplate.opsForValue().multiSet(map);
List<String> str = new ArrayList<>();
str.add("d");
str.add("e");
redisTemplate.opsForValue().multiGet(str);
2.List
(1)头部添加一个/多个元素
Long alist = redisTemplate.opsForList().leftPush("alist", "1");
System.out.println(alist);
List<String> listTemp = new ArrayList<>();
listTemp.add("1");
listTemp.add("2");
listTemp.add("3");
Long alist = redisTemplate.opsForList().leftPushAll("alist", listTemp);
System.out.println(alist);
Long blist = redisTemplate.opsForList().leftPushAll("alist", listTemp.toArray());
System.out.println(blist);
Long clist = redisTemplate.opsForList().leftPushAll("alist", new String[]{"4","5","6"});
System.out.println(clist);
(2)尾部添加一个/多个元素
Long alist = redisTemplate.opsForList().rightPush("alist", "2");
System.out.println(alist);
List<String> listTemp = new ArrayList<>();
listTemp.add("1");
listTemp.add("2");
listTemp.add("3");
Long alist = redisTemplate.opsForList().rightPushAll("blist", listTemp);
System.out.println(alist);
Long blist = redisTemplate.opsForList().rightPushAll("blist", listTemp.toArray());
System.out.println(blist);
Long clist = redisTemplate.opsForList().rightPushAll("blist", new String[]{"4","5","6"});
System.out.println(clist);
Long clist = redisTemplate.opsForList().rightPushAll("clist", "2", "7");
System.out.println(clist);
(3)获取列表中单个元素
Object value1 = redisTemplate.opsForList().index("alist", 0L);
System.out.println(value1);
Object value2 = redisTemplate.opsForList().index("alist", 1L);
System.out.println(value2);
Object value3 = redisTemplate.opsForList().index("alist", 2L);
System.out.println(value3);
(4)获取列表中多个元素
List<Object> alist = redisTemplate.opsForList().range("alist", 0L, 1L);
System.out.println(alist);
List<Object> blist = redisTemplate.opsForList().range("alist", 0L, 2L);
System.out.println(blist);
List<Object> clist = redisTemplate.opsForList().range("blist", 0L, 1L);
System.out.println(clist);
List<Object> dlist = redisTemplate.opsForList().range("alist", 0, -1);
System.out.println(dlist);
List<Object> elist = redisTemplate.opsForList().range("alist", 1, -1);
System.out.println(elist);
(5)如果存在key才会存储
Long alist = redisTemplate.opsForList().leftPushIfPresent("alist", "1");
System.out.println(alist);
Long blist = redisTemplate.opsForList().leftPush("alist", "1");
System.out.println(blist);
Long clist = redisTemplate.opsForList().leftPushIfPresent("alist", "2");
System.out.println(clist);
(6)如果pivot处值存在则在pivot前面添加
Long alist = redisTemplate.opsForList().leftPush("alist", 1,"4");
System.out.println(alist);
Long blist = redisTemplate.opsForList().leftPush("alist", "1","4");
System.out.println(blist);
Long clist = redisTemplate.opsForList().leftPush("alist", "2","6");
System.out.println(clist);
Long dlist = redisTemplate.opsForList().rightPush("alist", "2","7");
System.out.println(dlist);
Long elist = redisTemplate.opsForList().rightPush("alist", "1","8");
System.out.println(elist);
(7)修改某索引的值
redisTemplate.opsForList().set("blist", 1, "7");
redisTemplate.opsForList().set("blist", 5, "8");
(8)获取列表中元素个数
Long blist = redisTemplate.opsForList().size("blist");
System.out.println(blist);
(9)裁剪列表
redisTemplate.opsForList().trim("blist",1,2);
(10)从列表中删除某个值的元素
Long blist = redisTemplate.opsForList().remove("blist", 2, "0");
System.out.println(blist);
System.out.println(redisTemplate.opsForList().range("blist", 0, 9));
Long clist = redisTemplate.opsForList().remove("blist", 2, "1");
System.out.println(clist);
System.out.println(redisTemplate.opsForList().range("blist", 0, 9));
Long dlist = redisTemplate.opsForList().remove("blist", -3, "1");
System.out.println(dlist);
System.out.println(redisTemplate.opsForList().range("blist", 0, 9));
Long elist = redisTemplate.opsForList().remove("blist", 0, "1");
System.out.println(elist);
System.out.println(redisTemplate.opsForList().range("blist", 0, 9));
(11)从左侧/右侧移除并获取列表中第一个元素
Object value = redisTemplate.opsForList().leftPop("blist");
System.out.println(value);
Object value2 = redisTemplate.opsForList().rightPop("blist");
System.out.println(value2);
Object value3 = redisTemplate.opsForList().leftPop("blist", 2, TimeUnit.SECONDS);
System.out.println(value3);
Object value4 = redisTemplate.opsForList().rightPop("blist", 1, TimeUnit.SECONDS);
System.out.println(value4);
Object value5 = redisTemplate.opsForList().leftPop("blist");
System.out.println(value5);
Object value6 = redisTemplate.opsForList().leftPop("blist", 2, TimeUnit.SECONDS);
System.out.println(value6);
Object value7 = redisTemplate.opsForList().leftPop("blist");
System.out.println(value7);
(12)从一个队列的右边弹出一个元素并将这个元素放入另一个指定队列的最左边
Object value = redisTemplate.opsForList().rightPopAndLeftPush("alist","blist");
System.out.println(value);
Object value2 = redisTemplate.opsForList().rightPopAndLeftPush("alist","blist",2,TimeUnit.SECONDS);
System.out.println(value2);
3.Hash
(1)单个/多个添加
redisTemplate.opsForHash().put("ahash","a","1");
Map<String, String> map = new HashMap<>();
map.put("b", "2");
map.put("c", "3");
map.put("d", "4");
redisTemplate.opsForHash().putAll("ahash",map);
Map<Object, Object> ahash = redisTemplate.opsForHash().entries("ahash");
System.out.println(ahash);
(2)单个/多个field-value获取
Object value1 = redisTemplate.opsForHash().get("ahash", "a");
System.out.println(value1);
Object value2 = redisTemplate.opsForHash().get("ahash", "e");
System.out.println(value2);
Map<Object, Object> valueMap = redisTemplate.opsForHash().entries("ahash");
System.out.println(valueMap);
Map<Object, Object> valueMap1 = redisTemplate.opsForHash().entries("bhash");
System.out.println(valueMap1);
List<Object> list = new ArrayList<>();
list.add("d");
list.add("e");
list.add("f");
List<Object> ahash = redisTemplate.opsForHash().multiGet("ahash", list);
System.out.println(ahash);
List<Object> chash = redisTemplate.opsForHash().multiGet("chash", list);
System.out.println(chash);
(3)获取该key下所有的field
Set<Object> ahashSet = redisTemplate.opsForHash().keys("ahash");
System.out.println(ahashSet);
Set<Object> ahashSet1 = redisTemplate.opsForHash().keys("bhash");
System.out.println(ahashSet1);
(4)获取该key下所有的value
List<Object> ahashList = redisTemplate.opsForHash().values("ahash");
System.out.println(ahashList);
List<Object> ahashList1 = redisTemplate.opsForHash().values("bhash");
System.out.println(ahashList1);
(5)根据field是否存在判断是否设置
Boolean aBoolean = redisTemplate.opsForHash().putIfAbsent("ahash", "e", "5");
System.out.println(aBoolean);
Boolean bBoolean = redisTemplate.opsForHash().putIfAbsent("bhash", "a", "1");
System.out.println(bBoolean);
Boolean cBoolean = redisTemplate.opsForHash().putIfAbsent("ahash", "e", "5");
System.out.println(cBoolean);
Boolean dBoolean = redisTemplate.opsForHash().putIfAbsent("bhash", "a", "2");
System.out.println(dBoolean);
(6)判断当前key下的field的是否存在
Boolean aBoolean = redisTemplate.opsForHash().hasKey("ahash","a");
System.out.println(aBoolean);
Boolean bBoolean = redisTemplate.opsForHash().hasKey("ahash", "f");
System.out.println(bBoolean);
Boolean cBoolean = redisTemplate.opsForHash().hasKey("chash", "a");
System.out.println(cBoolean);
(7)查询当前key下field-value的个数
Long ahash = redisTemplate.opsForHash().size("ahash");
System.out.println(ahash);
Long chash = redisTemplate.opsForHash().size("chash");
System.out.println(chash);
(8)删除/批量删除
Long ahash = redisTemplate.opsForHash().delete("ahash","a");
System.out.println(ahash);
Long ahash1 = redisTemplate.opsForHash().delete("ahash","a","b","c");
System.out.println(ahash1);
Long ahash2 = redisTemplate.opsForHash().delete("ahash","f");
System.out.println(ahash2);
Long ahash3 = redisTemplate.opsForHash().delete("chash","a");
System.out.println(ahash3);
Long bhash = redisTemplate.opsForHash().delete("bhash");
System.out.println(bhash);
Long chash = redisTemplate.opsForHash().delete("chash");
System.out.println(chash);
(9)获取某个key下所有匹配的field-value代替key*
Cursor<Map.Entry<Object, Object>> cursor = redisTemplate.opsForHash().scan("ahash", ScanOptions.scanOptions().match("*").count(1000).build());
try {
while (cursor.hasNext()) {
Map.Entry<Object, Object> next = cursor.next();
System.out.println("key = " +next.getKey() + " value = " + next.getValue());
}
}catch (Exception e){
e.printStackTrace();
}finally {
cursor.close();
}
4.Set
(1)单个/批量添加元素
Long aset = redisTemplate.opsForSet().add("aset", "a");
System.out.println(aset);
Long aset2 = redisTemplate.opsForSet().add("aset", "a");
System.out.println(aset2);
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
Long bset = redisTemplate.opsForSet().add("bset", list);
System.out.println(bset);
Long bset1 = redisTemplate.opsForSet().add("bset", list.toArray());
System.out.println(bset1);
(2)获取当前set中所有值
Set<Object> bset = redisTemplate.opsForSet().members("bset");
System.out.println(bset);
(3)获取当前set中元素个数
Long bset = redisTemplate.opsForSet().size("bset");
System.out.println(bset);
Long cset = redisTemplate.opsForSet().size("cset");
System.out.println(cset);
(4)判断集合中是否包含某个value
Boolean bset = redisTemplate.opsForSet().isMember("bset", "a");
System.out.println(bset);
Boolean cset = redisTemplate.opsForSet().isMember("cset", "a");
System.out.println(cset);
(5)从集合中随机获取N个元素(是/否去重)
Object bset = redisTemplate.opsForSet().randomMember("bset");
System.out.println(bset);
Object cset = redisTemplate.opsForSet().randomMember("cset");
System.out.println(cset);
List<Object> randomSet = redisTemplate.opsForSet().randomMembers("bset",1);
System.out.println(randomSet);
List<Object> randomSets = redisTemplate.opsForSet().randomMembers("bset", 5);
System.out.println(randomSets);
List<Object> randomSetNull = redisTemplate.opsForSet().randomMembers("cset", 1);
System.out.println(randomSetNull);
Set<Object> bset1 = redisTemplate.opsForSet().distinctRandomMembers("bset", 1);
System.out.println(bset1);
Set<Object> bset2 = redisTemplate.opsForSet().distinctRandomMembers("bset", 5);
System.out.println(bset2);
Set<Object> cset1 = redisTemplate.opsForSet().distinctRandomMembers("cset", 1);
System.out.println(cset1);
(6)获取集合中所有的元素(遍历)
Cursor<Object> cursor = redisTemplate.opsForSet().scan("cset", ScanOptions.scanOptions().match("*").count(1000).build());
System.out.println(cursor);
try {
while (cursor.hasNext()) {
Object next = cursor.next();
System.out.println(next);
}
}catch (Exception e){
e.printStackTrace();
}finally {
cursor.close();
}
(7)单个/批量删除集合中的元素
Long removeCount = redisTemplate.opsForSet().remove("bset", "c");
System.out.println(removeCount);
Long removeCounts = redisTemplate.opsForSet().remove("bset", "a", "c");
System.out.println(removeCounts);
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
Long removeListCount = redisTemplate.opsForSet().remove("bset", list);
System.out.println(removeListCount);
Long removeSetNullCount = redisTemplate.opsForSet().remove("cset", "k");
System.out.println(removeSetNullCount);
Long remove = redisTemplate.opsForSet().remove("bset", list.toArray());
System.out.println(remove);
(8)删除并返回一个随机的元素
Object bset = redisTemplate.opsForSet().pop("bset");
System.out.println(bset);
Object cset = redisTemplate.opsForSet().pop("cset");
System.out.println(cset);
(9)求两个/多个集合的交集
Set<Object> twoIntersect = redisTemplate.opsForSet().intersect("aset", "bset");
System.out.println(twoIntersect);
List<String> list = new ArrayList<>();
list.add("bset");
list.add("cset");
Set<Object> moreIntersect = redisTemplate.opsForSet().intersect("aset", list);
System.out.println(moreIntersect);
(10)将两个/N个集合的交集存入另一个集合中
Long cset = redisTemplate.opsForSet().intersectAndStore("aset", "bset", "cset");
System.out.println(cset);
Long dset = redisTemplate.opsForSet().intersectAndStore("aset", Arrays.asList("bset", "cset"), "dset");
System.out.println(dset);
(11)求两个/多个集合的并集
Set<Object> union = redisTemplate.opsForSet().union("aset", "bset");
System.out.println(union);
Set<Object> unionMore = redisTemplate.opsForSet().union("aset", Arrays.asList("bset", "cset"));
System.out.println(unionMore);
(12)将两个/N个集合的并集存入另一个集合中
Long unionAndStore = redisTemplate.opsForSet().unionAndStore("aset", "bset", "cset");
System.out.println(unionAndStore);
Long unionAndStore1 = redisTemplate.opsForSet().unionAndStore("aset", Arrays.asList("bset", "cset"), "dset");
System.out.println(unionAndStore1);
Long unionAndStore2 = redisTemplate.opsForSet().unionAndStore("fset", "kset", "lset");
System.out.println(unionAndStore2);
(13)求两个集合的差集
Set<Object> difference = redisTemplate.opsForSet().difference("aset", "bset");
System.out.println(difference);
Set<Object> differenceMore = redisTemplate.opsForSet().difference("aset", Arrays.asList("bset", "cset"));
System.out.println(differenceMore);
(14)将两个/N个集合的差集存入另一个集合中
Long differenceAndStore = redisTemplate.opsForSet().differenceAndStore("aset", "bset", "dset");
System.out.println(differenceAndStore);
Long differenceAndStoreMore = redisTemplate.opsForSet().differenceAndStore("aset", Arrays.asList("bset", "cset"),"fset");
System.out.println(differenceAndStoreMore);
Long differenceAndStoreMore1 = redisTemplate.opsForSet().differenceAndStore("aset", Arrays.asList("bset"),"cset");
System.out.println(differenceAndStoreMore1);
5.Zset
(1)添加元素
Boolean result = redisTemplate.opsForZSet().add("azset", "a", 1);
System.out.println(result);
Boolean result1 = redisTemplate.opsForZSet().add("azset", "a", 1);
System.out.println(result1);
Boolean result2 = redisTemplate.opsForZSet().add("azset", "a", 2);
System.out.println(result2);
Boolean result3 = redisTemplate.opsForZSet().add("azset", "b", 2);
System.out.println(result3);
Boolean result4 = redisTemplate.opsForZSet().add("azset", "c", 1);
System.out.println(result4);
(2)增加/减少元素的score值,并返回增加/减少后的值
Double newScore1 = redisTemplate.opsForZSet().incrementScore("azset", "a", 1);
System.out.println(newScore1);
Double newScore2 = redisTemplate.opsForZSet().incrementScore("azset", "a", -1);
System.out.println(newScore2);
Double newScore3 = redisTemplate.opsForZSet().incrementScore("azset", "d", 1);
System.out.println(newScore3);
Double newScore4 = redisTemplate.opsForZSet().incrementScore("bzset", "d", 1);
System.out.println(newScore4);
(3)返回元素在集合中的排名
Long aRank = redisTemplate.opsForZSet().rank("azset", "a");
System.out.println(aRank);
Long bRank = redisTemplate.opsForZSet().rank("azset", "b");
System.out.println(bRank);
Long cRank = redisTemplate.opsForZSet().rank("azset", "c");
System.out.println(cRank);
Long dRank = redisTemplate.opsForZSet().rank("azset", "d");
System.out.println(dRank);
Long eRank = redisTemplate.opsForZSet().rank("azset", "e");
System.out.println(eRank);
Long reverseRank = redisTemplate.opsForZSet().reverseRank("azset", "d");
System.out.println(reverseRank);
(4)获取集合的大小
Long aSize = redisTemplate.opsForZSet().size("azset");
System.out.println(aSize);
Long bSize = redisTemplate.opsForZSet().size("bzset");
System.out.println(bSize);
Long aZcard = redisTemplate.opsForZSet().zCard("azset");
System.out.println(aZcard);
Long bZcard = redisTemplate.opsForZSet().zCard("bzset");
System.out.println(bZcard);
(5)根据key-value查询对应的score值
//初始azset集合中元素顺序为[a=1 b=2 c=2 d=3] bzset不存在
Double score = redisTemplate.opsForZSet().score("azset", "a")
System.out.println(score)
Double score1 = redisTemplate.opsForZSet().score("bzset", "a")
System.out.println(score1)
(6)获取集合中给定区间的元素(按照分数从大到小顺序)
Set<ZSetOperations.TypedTuple<Object>> azset = redisTemplate.opsForZSet().reverseRangeWithScores("azset", 0, 1);
azset.stream().forEach(s->{
System.out.println("value = "+s.getValue() + " score = "+s.getScore());
});
Set<ZSetOperations.TypedTuple<Object>> allAzset = redisTemplate.opsForZSet().reverseRangeWithScores("azset", 0, -1);
allAzset.stream().forEach(s->{
System.out.println("value = "+s.getValue() + " score = "+s.getScore());
});
Set<ZSetOperations.TypedTuple<Object>> nullAzset = redisTemplate.opsForZSet().reverseRangeWithScores("bzset", 0, 1);
nullAzset.stream().forEach(s->{
System.out.println("value = "+s.getValue() + " score = "+s.getScore());
});
(7)按照Score值查询集合中的元素
Set<Object> azset = redisTemplate.opsForZSet().reverseRangeByScore("azset", 1, 2);
System.out.println(azset);
Set<ZSetOperations.TypedTuple<Object>> azset1 = redisTemplate.opsForZSet().reverseRangeByScoreWithScores("azset", 1, 2);
azset1.stream().forEach(s->{
System.out.println("value = "+s.getValue() + " score = "+s.getScore());
});
(8)根据score值获取集合元素数量
Long azsetCount = redisTemplate.opsForZSet().count("azset", 1, 2);
System.out.println(azsetCount);
(9)从高到低的排序集中获取分数在最小和最大值之间的元素
Set<Object> azset = redisTemplate.opsForZSet().reverseRangeByScore("azset", 1, 2, 1, 2);
System.out.println(azset);
(10)将两个/N个集合的交集/并集存入其他集合中
Long count1 = redisTemplate.opsForZSet().intersectAndStore("azset", "bzset", "dzset");
System.out.println(count1);
Long count2 = redisTemplate.opsForZSet().intersectAndStore("azset", Arrays.asList("bzset","czset"), "dzset");
System.out.println(count2);
Long count3 = redisTemplate.opsForZSet().unionAndStore("azset", "bzset", "dzset");
System.out.println(count3);
Long count4 = redisTemplate.opsForZSet().unionAndStore("azset", Arrays.asList("bzset","czset"), "dzset");
System.out.println(count4);
(11)遍历集合中匹配/全部的元素
Cursor<ZSetOperations.TypedTuple<Object>> cursor = redisTemplate.opsForZSet().scan("azset", ScanOptions.NONE);
try {
while (cursor.hasNext()) {
ZSetOperations.TypedTuple<Object> next = cursor.next();
System.out.println("score = " + next.getScore() + " value = " + next.getValue());
}
}catch (Exception e){
e.printStackTrace();
}finally {
cursor.close();
}
(12)删除元素
Long remove1 = redisTemplate.opsForZSet().remove("azset", "a");
System.out.println(remove1);
Long remove2 = redisTemplate.opsForZSet().remove("azset", Arrays.asList("b","c"));
System.out.println(remove2);
Long remove3 = redisTemplate.opsForZSet().remove("azset", Arrays.asList("b","d").toArray());
System.out.println(remove3);
Long remove4 = redisTemplate.opsForZSet().removeRange("azset", 1, 2);
System.out.println(remove4);
Long remove5 = redisTemplate.opsForZSet().removeRangeByScore("azset", 5, 6);
System.out.println(remove5);