redis 和 SpringBoot 整合
下载redis依赖
maven依赖网址:https://mvnrepository.com/ ,查找 redis 下载依赖。根据自己所需 下载合适版本
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>3.1.0</version>
<scope>test</scope>
</dependency>
application.yml 配置redis端口号和地址(可配可不配,默认有)
默认端口号 6379 地址 localhost,你的redis端口号没改,不配不影响运行
server:
port: 8889
spring:
redis:
port: 6379
host: localhost
调用方法
注入 RedisTemplate
@Autowired
private StringRedisTemplate redisTemplate;
根据你不同的需求 调用不同的方法去存储
存字符串
//String类型
public void set(String key,String val) {
// 首先redisTemplate.opsForValue的目的就是表明是以key,value形式储存到Redis数据库中数据的
ValueOperations ops = redisTemplate.opsForValue();
//set有很多种 例如存的时候设置时间等 可以点进去看看 这是最基础的一种
ops.set(key, val);
}
public Object get(String key){
ValueOperations ops = redisTemplate.opsForValue();
Object xm = ops.get(key);
return xm;
}
存map
//这是直接存整个map
//例如:
//Map<String ,Object> map = new new HashMap<>();
//map.put("age",18);
public void setMap(Map map){
HashOperations hops = redisTemplate.opsForHash();
//存map的第二种方式 一整个添加
hops.putAll("map1", map);
}
//这是一个个存 key 可以一样 hashKey 得不一样
//例如 : setMap("map1","name","Kime");
public void setMap(String key,String hashKey ,Object value){
HashOperations hops = redisTemplate.opsForHash();
//存map的第一种方式 一个个添加
hops.put(key, hashKey, value);
}
//获取整个map
public Map getMap(String key){
HashOperations hashOperations = redisTemplate.opsForHash();
//entries() 通过key可以获取整个map
Map map1 = hashOperations.entries(key);
return map1;
}
//获取map的精准值
public Object getMap(String key ,String hashKey){
HashOperations hashOperations = redisTemplate.opsForHash();
//get() 有两个参数 通过key 和 hashKey 拿取精准得数值
Object o = hashOperations.get(key, hashKey);
return o;
}
存对象
据了解目前存对象有三种方式 ,第一种以”map“的形式存储,第二种以”序列化“(可能会乱码),第三种”json“(本人觉得最简单的方式)。
//第一种看上面的map存储 就不过多讲了
//第二、第三种都是以上面value的类型去存储
//第二种 以序列化存储(未实现)
//第三种 json
//通过序列化存对象 这里参数用 T 使用了范形 可以传如何对象
// User user = new User();
//user.setAge("16");
//user.setHeight("178");
//user.setName("李婉儿");
//redisUtil.setObject(user);
public <T> void setObject(T object){
redisTemplate.opsForValue().set("user", JSON.toJSONString(object));
}
//通过key获取对象 在调用的时候转成对象
//Object user1 = redisUtil.getObject("user");
public Object getObject(String key){
Object user = redisTemplate.opsForValue().get(key);
return user;
}
配置自己的 RedisTemplate
官方配置好的一般是标配 ,想要加餐 当然还得靠自己
RedisAutoConfiguration 类中 ConditionalOnMissingBean,有自定义的redisTemplate时可以加载自定义的template,没有便启动自带的。自定义的名字为redisTemplate才能识别 ,否则无效哦~
//配置完成后 你调用的 redisTemplate 会先指向这个
@Configuration
public class RedisAutoConfiguration {
@Bean(name = "redisTemplate")
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
//json序列化配置
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
//取objectmapper做转译器
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
//string序列化配置
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//key采用string序列化配制
template.setKeySerializer(stringRedisSerializer);
//hash的key采用string序列化配制
template.setHashKeySerializer(stringRedisSerializer);
//value采用jackson序列化
template.setValueSerializer(jackson2JsonRedisSerializer);
//hash的value采用jackson序列化配置
template.setHashValueSerializer(jackson2JsonRedisSerializer);
return template;
}
}