spring data redis操作redis(二)
上一篇说到了如何操作k,v类型并说到了序列化的问题并解决。这一篇就讲解一下操作其他的redis数据类型。
操作String类型数据
@Test
void testString() {
ValueOperations valueOperations = stringRedisTemplate.opsForValue();
valueOperations.set("name456","xiaohong");
String name = (String) valueOperations.get("name456");
System.out.println(name);
//设置键值对过期时间 对应setex命令
valueOperations.set("key1","value1",10L, TimeUnit.SECONDS);//最后一个参数是失效时间的单位
}
10秒过后,发现key已经消失了,这就是对应了redus的setex命令

对应setnx命令,如果不存在时返回true,否则false
@Test
void testString() {
ValueOperations valueOperations = stringRedisTemplate.opsForValue();
valueOperations.set("name456","xiaohong");
String name = (String) valueOperations.get("name456");
System.out.println(name);
//设置键值对过期时间 对应setex命令
valueOperations.set("key1","value1",10L, TimeUnit.SECONDS);
//当key不存在时生效,对应setnx命令
Boolean flag = valueOperations.setIfAbsent("name456", "123");
System.out.println(flag);
}

不存在则为true

Hash类型
@Test
void testHash(){
HashOperations<String, String, String> hashOperations = stringRedisTemplate.opsForHash();
//存值
hashOperations.put("001","name","xiaoming");
hashOperations.put("001","age","20");
hashOperations.put("001","address","bj");
//取值
String name = hashOperations.get("001", "name");
System.out.println(name);
//获取所有的键
Set<String> keys = hashOperations.keys("001");
for(String key:keys){
System.out.println(key);
}
//获取所有的值
List<String> values = hashOperations.values("001");
for(String value:values){
System.out.println(value);
}
}
操作list类型
@Test
void testList(){
ListOperations<String, String> listOperations = stringRedisTemplate.opsForList();
//存值,leftPush方法只能存一个list元素
listOperations.leftPush("mylist","a");
//存值,存储多个list元素
listOperations.leftPushAll("mylist","b","c","d");
//取值
List<String> mylist = listOperations.range("mylist", 0, -1);
//遍历
mylist.stream().map((item)->{
System.out.println(item);
return null;
}).collect(Collectors.toList());
//出队列
int size = listOperations.size("mylist").intValue();//获取list长度
for (int i = 0; i < size; i++) {
String element = listOperations.rightPop("mylist");//从右边出队列并返回值
System.out.println(element);
}
}
因为a是最先进队列的,然后又是左边push所以就成了最后了。

出队列就从右边开始出,所以执行过程就是这样了

操作set集合
@Test
void testSet(){
SetOperations<String, String> setOperations = stringRedisTemplate.opsForSet();
//存值
setOperations.add("myset","a","b","c","a");
//取值
Set<String> myset = setOperations.members("myset");
for(String set:myset){
System.out.println(set);
}
//删除成员
setOperations.remove("myset","a","b");
//取值
myset = setOperations.members("myset");
for(String set:myset){
System.out.println(set);
}
}
操作有序集合 sorted set
这里的a为什么是最后呢。因为set集合元素是唯一的,最后一个元素覆盖掉了第一个a,并且它的scores值最高,所以是最后。

然后修改了b的scores给它+20了,比所有的scores都高,所以它是最后的。删除a,b后只剩下了c

@Test
void teseZset(){
ZSetOperations<String, String> zSetOperations = stringRedisTemplate.opsForZSet();
//存值
zSetOperations.add("myZset","a",10.0);
zSetOperations.add("myZset","b",11.0);
zSetOperations.add("myZset","c",12.0);
zSetOperations.add("myZset","a",13.0);
//取值
Set<String> myZset = zSetOperations.range("myZset", 0, -1);
for (String Zset : myZset) {
System.out.println(Zset);
}
//修改分数
zSetOperations.incrementScore("myZset","b",20.0);
//取值
myZset = zSetOperations.range("myZset", 0, -1);
for (String Zset : myZset) {
System.out.println(Zset);
}
//删除成员
zSetOperations.remove("myZset","a","b");
//取值
myZset = zSetOperations.range("myZset", 0, -1);
for (String Zset : myZset) {
System.out.println(Zset);
}
}
通用操作
@Test
public void testCommon(){
//获取Redis中所有的key
Set<String> keys = stringRedisTemplate.keys("*");
for (String key : keys) {
System.out.println(key);
}
//判断某个key是否存在
Boolean itcast = stringRedisTemplate.hasKey("itcast");
System.out.println(itcast);
//删除指定key
stringRedisTemplate.delete("myZset");
//获取指定key对应的value的数据类型
DataType dataType = stringRedisTemplate.type("myset");
System.out.println(dataType.name());
}


浙公网安备 33010602011771号