package com.yq.demo.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yq.demo.model.User;
import org.apache.tomcat.util.json.JSONParser;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.stereotype.Component;
/**
* 接收订阅消息
* @author:yuqiang
* @date:2022.2.9
* */
@Component
public class RedisReceiver_01 implements RedisReceiveMsg{
@Override
public void receiveMessage(String message){
//如果发送的是对象,此处返回的是json格式的字符串
//通过序列号获取对象
Jackson2JsonRedisSerializer seria = new Jackson2JsonRedisSerializer(User.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
seria.setObjectMapper(objectMapper);
User user = (User)seria.deserialize(message.getBytes());
System.out.println("01 - "+message);
}
}
RedisReceiver_02类
点击查看代码
package com.yq.demo.config;
import org.springframework.stereotype.Component;
@Component
public class RedisReceiver_02 implements RedisReceiveMsg {
@Override
public void receiveMessage(String message) {
System.out.println("02 - "+message);
}
}
//字符串
redisTemplate.opsForValue().set(key,value);//value可以是字符串也可以是对象
redisTemplate.opsForValue().get(key);//获取
redisTemplate.opsForValue().set(key,user,100, TimeUnit.MILLISECONDS);//增加过期时间
redisTemplate.hasKey(key);//包含key
redisTemplate.delete(key);//删除key
long l1=redisTemplate.opsForValue().increment(key);//如果value是数字,则value+1返回+1后的值
long l2=redisTemplate.opsForValue().increment(key,100);//value+100,返回+100后的值
long l3=redisTemplate.opsForValue().decrement(key);//value-1
redisTemplate.opsForValue().append(key,"bcdef");//末尾追加字符串
redisTemplate.opsForValue().get(key,1,2);//截取字符串
redisTemplate.opsForValue().set(key2,"12",1);//字符串替换,从索引1开始后面的两个字符被12替换
boolean b=redisTemplate.opsForValue().setIfAbsent(key,value);//不存在则更新并返回true,否则返回false
boolean b=redisTemplate.opsForValue().setIfPresent(key,value);//存在则更新并返回true,否则返回false
//list
ListOperations list =redisTemplate.opsForList();
long l1=list.leftPush("list","hello");//从左侧添加元素,返回元素总数
long l2=list.rightPush("list","world");//从右侧添加元素,返回元素总数
List values=list.range("list",0,1);//获取0-1元素,包含0和1
List values=list.range("list",0,-1);//获取所有元素,-1表示末尾
String str=list.index("list",1);//根据下标获取元素
list.trim("list",1,3);//只保留下标1-3的元素,包含1和3
String strV=list.leftPop("list");//从左侧弹出元素,返回弹出元素的值
long l3=list.size("list");//获取总元素个数
String strV=list.leftPop("list",10,TimeUnit.SECONDS);//从左侧弹出元素,如没有元素则等待10秒有元素则弹出返回,元素超时不再等待
//set 无序集合-去重
SetOperations set=redisTemplate.opsForSet();
long l1=set.add("userName","Jack");//添加成功返回1
long l2=set.add("userName","Jack");//重复添加失败返回0
long l3=set.add("userName","Jone");
long l4=set.add("name","Tom");
Set values=set.members("userName");//获取所有元素
String strPop=set.pop("userName");//从集合中随机获取一个元素并将其移除
set.move("userName","Jone","name");//将userName集合中的Jone移动到集合name中,userName集合会删除Jone
Set values=set.difference("userName","name");//将userName中不同于name的数据找出来
Set values=set.union("userName","name");//并集
Set values=set.intersect("userName","name");//交集
boolean b=set.isMember("userName","Jack");//检查元素是否存在于集合中
long i=set.remove("userName","Jack","Jone");//从集合中删除元素,返回删除的个数
//zset 有序集合-去重
ZSetOperations zset=redisTemplate.opsForZSet();
//三个参数分别是key,value,score,默认按照score增序排序
//key,value相同返回false,否则返回true
boolean b=zset.add(key,"hello",1);
b=zset.add(key,"at",2);
Double d=zset.incrementScore(key,"s1",2);//与add相同分值排在2之后递增排序,返回分值
Double d=zset.incrementScore(key,"s2",2);//分值与上面的相同会排在s1后面
b=zset.add(key,"at2",2);//以上增序顺序的值为: hello,at,s1,s2,at2
long size=zset.size(key);//获取集合内元素总数
Set values=zset.range(key,0,size);//获取元素
Double score=zset.score(key,val);//根据key和value获取分值
Set values=zset.reverseRange(key,0,size);//反向排序
Set values=zset.rangeByScore(key,2,4);//获取分值在2-4之间的包含2和4
zset.count(key,2,4);//指定分值范围内集合内元素的数量
long index=zset.rank(key,"at2");//返回成员在集合中的排序,从1开始计数
//intersectAndStore取集合1和集合2的交接赋值到集合3中,如集合3元原有元素会被清除,返回交集元素个数
Long l1 = redisTemplate.opsForZSet().intersectAndStore(key, key+"1",key+"2");//默认分值取两个集合中分值的和
Long l2=zset.intersectAndStore(key,keys,key+"3", RedisZSetCommands.Aggregate.MIN);//指定分值计算方式-交集分值取交集中较小的
//hash
HashOperations hash=redisTemplate.opsForHash();
hash.put("user","id","1");
hash.put("user","userName","Jack");//
List list=hash.values("user");//返回所有value
Map map=hash.entries("user");//返回key,value
Set sets=hash.keys("user");//返回所有键,id,userName
hash.increment("user","id",10);//value+10
hash.size("user");//集合大小