Redis:使用SpringDataRedis进行连接操作?
使用流程
一、导入依赖
<!--Redis依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!--连接池依赖--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency>
二、配置文件application.yml
spring:
redis:
host: 47.93.191.163
port: 6379
password: lurenjia
#lettuce连接池
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
max-wait: 1000ms
三、代码实现
//注入对象 @Autowired private RedisTemplate redisTemplate; @Test void testString(){ //获取操作String类型的连接对象,并存入数据 redisTemplate.opsForValue().set("name","lurenjia"); //取出数据 System.out.println(redisTemplate.opsForValue().get("name")); }
序列化器
默认
使用的序列号器为jdk的序列化器,在key-value序列化时,会出现不友好的信息格式:
自定义
解决办法:自定义使用的序列化器
@Configuration public class RedisConfig { @Bean public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){ //1 创建RedisTemplate对象 RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); //2 设置连接工厂 redisTemplate.setConnectionFactory(factory); //3 创建序列化工具 GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer(); //4 设置key的序列化器,String类型、hash类型 redisTemplate.setKeySerializer(RedisSerializer.string()); redisTemplate.setHashKeySerializer(RedisSerializer.string()); //5 设置value的序列化器,使用jackson提供的序列化器,能够转为json格式 redisTemplate.setValueSerializer(jsonRedisSerializer); redisTemplate.setHashValueSerializer(jsonRedisSerializer); return redisTemplate; } }
使用Jackson序列化器能够自动序列化和反序列化对象,它的实现是基于储存的时候增入一个属性:"class":类的全限定路径
如果不想储存这个信息,可以使用手动序列号和反序列化的形式。
即,使用string方式进行所有信息(对象、非对象)的序列号反序列化。
StringRedisTemplate
默认使用string序列化器,代码示例:
void testString() throws JsonProcessingException { //1 对象数据 User user = new User("lurenjia",18); //2 手动序列化 String stringUser = objectMapper.writeValueAsString(user); //3 存入数据库 stringRedisTemplate.opsForValue().set("user:1001",stringUser); //4 从数据库中取出对象数据 String val = stringRedisTemplate.opsForValue().get("user:1001"); System.out.println("看看数据:"+val); //5 手动反序列化 User readValue = objectMapper.readValue(val, User.class); System.out.println("看看对象:"+readValue); }