[ Redis ] SpringBoot集成使用Redis(补充)
目录
四. springBoot 集成使用 redis
(1). 概述
(2). 搭建
1. 添加 redis 依赖
2. 配置连接 redis
3. 注入 RedisTemplate
4. 测试
5. 后端测试redis
四. springBoot 集成使用 redis
(1). 概述
Jedis 是 Redis 官方推出的一款面向 Java 的客户端,提供了很多接口供 Java 语言调用。可以在 Redis 官网下载.
Spring-data-redis 是 spring 大家族的一部分 ,提供了在 srping 应用中通过简单的配置访问 redis 服务,对 reids 底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate 提供了 redis 各种操作.
spring-data-redis 针对 Redis 提供了如下功能:
1.连接池自动管理,提供了一个高度封装的“RedisTemplate”类.
2.针对 jedis 客户端中大量 api 进行了归类封装,将同一类型操作封装为operation 接口.
ValueOperations:简单 K-V 操作
SetOperations:set 类型数据操作
ZSetOperations:zset 类型数据操作
HashOperations:针对 map 类型的数据操作
ListOperations:针对 list 类型的数据操作
3.将事务操作封装,有容器控制。
4.针对数据的“序列化/反序列化”,提供了多种可选择策略(RedisSerializer)
JdkSerializationRedisSerializer:POJO 对象的存取场景,使用 JDK 本身序列化机制.
StringRedisSerializer:Key 或者 value 为字符串的场景,根据指定的charset 对数据的字节序列编码成 string,是“new String(bytes, charset)”和 “string.getBytes(charset)”的直接封装。是最轻量级和高效的策略。
JacksonJsonRedisSerializer:jackson-json 工具提供了 javabean 与 json之间的转换能力,可以将 pojo 实例序列化成 json 格式存储在 redis 中,也可以将 json 格式的数据转换成 pojo 实例。
(2). 搭建
1. 添加 redis 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2. 配置连接 redis
spring:
redis:
host: 192.168.31.100
port: 6379
password: 111
database: 0
pool:
max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 8 # 连接池中的最大空闲连接
min-idle: 0 # 连接池中的最小空闲连接
timeout: 5000ms # 连接超时时间(毫秒)
3. 注入 RedisTemplate
@Autowired
RedisTemplate redisTemplate;
4. 测试
redisTemplate.opsForValue().set("name", "aa");
redisTemplate.opsForValue().set("users", users,10*1000, TimeUnit.MILLISECONDS);
redisTemplate.hasKey("name");
redisTemplate.opsForValue().get("name");
redisTemplate.delete("users");序列化键值
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<User>(User.class));
需要被 Redis 缓存的类,必须实现序列化接口
5. 后端测试redis
将上述命令转为后端的方法
package com.ffyc.news.web;import com.fasterxml.jackson.databind.ObjectMapper;
import com.ffyc.news.model.Menu;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.concurrent.TimeUnit;@RestController
@RequestMapping(path = "/redistest")
public class RedisTest {@Autowiredprivate RedisTemplate redisTemplate;@GetMapping(path = "testhash")public void testHash(){HashOperations hashOperations = redisTemplate.opsForHash();hashOperations.put("newsid1","dz",10);//点赞hashOperations.put("newsid1","fw",20);//访问hashOperations.put("newsid1","sc",5);//收藏System.out.println(hashOperations.get("newsid","sc"));}@GetMapping(path = "/teststring")public void testString(){//序列化,也可以添加配置类进行序列化 省去每次都添加序列化代码//redisTemplate.setKeySerializer(new StringRedisSerializer());//key键进行序列化//redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<Object>(Object.class));//value值进行序列化System.out.println(redisTemplate.delete("age"));//删除key键System.out.println(redisTemplate.hasKey("a"));//判断键key是否存在//获取String类型操作方法, ValueOperations封装操作String类型的方法ValueOperations valueOperations = redisTemplate.opsForValue();valueOperations.set("k","kk");System.out.println(valueOperations.get("k"));valueOperations.set("count",0);valueOperations.increment("count");valueOperations.increment("count");valueOperations.increment("count");//自增valueOperations.decrement("count");//自减System.out.println(valueOperations.get("count"));Menu menu = new Menu();menu.setId(1);menu.setName("新闻管理");valueOperations.set("menu",menu,10, TimeUnit.MINUTES);//(键,对象,失效时间,时间单位)}
}
注意: 添加redis序列化 避免redis中的数据格式与Java传输的数据格式不一致,操作失败
package com.ffyc.news.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
//redis序列化键值
@Configuration
public class RedisConfig {/*** 序列化键,值* @param connectionFactory* @return*/@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(connectionFactory);//序列化策略Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);StringRedisSerializer redisSerializer = new StringRedisSerializer();//key序列化为普通的redisTemplate.setKeySerializer(redisSerializer);//key 单一的字符串redisTemplate.setHashKeySerializer(redisSerializer);//将String,Hash结构值都序列化为json字符串redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);//value {}redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);return redisTemplate;}
}
如果开机redis没有启动,需要自己打开. 地址如下
D:\development\redis
![]()
