如何建设网站,安阳市商祺网络有限责任公司,陕西省建设网三类人员成绩公示,建设摩托车SpringDataRedis快速入门1.SpringDataRedis简介2.RedisTemplate快速入门3.RedisSerializer4.StringRedisTemplate1.SpringDataRedis简介
SpringData是Spring中数据操作的模块#xff0c;包含对各种数据库的集成#xff0c;其中对Redis的集成模块就叫做SpringDataRedis
Spri…
SpringDataRedis快速入门1.SpringDataRedis简介2.RedisTemplate快速入门3.RedisSerializer4.StringRedisTemplate1.SpringDataRedis简介
SpringData是Spring中数据操作的模块包含对各种数据库的集成其中对Redis的集成模块就叫做SpringDataRedis
SpringDataRedis中提供了RedisTemplate工具类其中封装了各种对Redis的操作。并且将不同数据类型的操作API封装到了不同的类型中 2.RedisTemplate快速入门
引入依赖
!-- Redis依赖 --
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId
/dependency
!-- 连接池依赖 --
dependencygroupIdorg.apache.commons/groupIdartifactIdcommons-pool2/artifactId
/dependency配置Redis
spring:redis:host: 127.0.0.1port: 6379lettuce:pool:max-active: 8 # 最大连接max-idle: 8 # 最大空闲连接min-idle: 1 # 最小空闲连接max-wait: 1000 # 连接等待时间现在就可以来测试一下啦
SpringBootTest
class RedisPageApplicationTests {Autowiredprivate RedisTemplate redisTemplate;Testvoid contextLoads() {ValueOperations valueOperations redisTemplate.opsForValue();valueOperations.set(ttl, 500);Object ttl valueOperations.get(ttl);System.out.println(ttl); // 500}
}3.RedisSerializer
RedisTemplate可以接收任意Object作为值写入Redis只不过写入前会把Object序列化为字节形式默认是采用JDK序列化得到的结果是这样的 缺点
可读性差内存占用较大
这时候就需要我们设置序列化方式了使用RedisSerializer指定序列化方式
因为要使用到JSON先要引入jackson依赖
!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --
dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.14.2/version
/dependency新增Redis配置类
Configuration
public class RedisConfig {Beanpublic RedisTemplateString, Object redisTemplate(RedisConnectionFactory connectionFactory) {// 创建RedisTemplate对象RedisTemplateString, Object template new RedisTemplate();// 设置连接工厂template.setConnectionFactory(connectionFactory);// 创建JSON序列化工具GenericJackson2JsonRedisSerializer jsonRedisSerializer new GenericJackson2JsonRedisSerializer();// 设置key的序列化template.setKeySerializer(RedisSerializer.string());template.setHashKeySerializer(RedisSerializer.string());// 设置value的序列化template.setValueSerializer(jsonRedisSerializer);template.setHashValueSerializer(jsonRedisSerializer);return template;}
}测试一下吧
SpringBootTest
class RedisPageApplicationTests {Autowiredprivate RedisTemplateString, Object redisTemplate;Testvoid contextLoads() {ValueOperationsString, Object opsForValue redisTemplate.opsForValue();opsForValue.set(name, 王哥);Object name opsForValue.get(name);System.out.println(name); // 王哥}
}这时就不会出现乱码现象了 现在来测试一下存储对象Redis会自动进行序列化和反序列化
Test
void contextLoads() {ValueOperationsString, Object opsForValue redisTemplate.opsForValue();opsForValue.set(klza:user:1, new User(1, dahezhiquanwuwu, 12));User user (User) opsForValue.get(klza:user:1);System.out.println(user); // User(id1, namedahezhiquanwuwu, age12)
}4.StringRedisTemplate
尽管JSON的序列化方式可以满足我们的需求但依然存在一些问题如图 为了在反序列化时知道对象的类型JSON序列化器会将类的class类型写入JSON结果中存入Redis这会带来额外的内存开销
为了节省内存空间我们并不会使用JSON序列化器来处理value而是统一使用String序列化器要求只能存储String类型的key和value。当需要存储Java对象时手动完成对象的序列化和反序列化。 Spring默认提供了一个StringRedisTemplate类它的key和value的序列化方式默认就是String方式。省去了我们自定义RedisTemplate的过程
SpringBootTest
class RedisPageApplicationTests {Autowiredprivate StringRedisTemplate redisTemplate;private static final ObjectMapper mapper new ObjectMapper();Testvoid contextLoads() throws JsonProcessingException {ValueOperationsString, String opsForValue redisTemplate.opsForValue();User user new User(1, 王伟, 27);// 手动序列化String s mapper.writeValueAsString(user);opsForValue.set(klza:user:3, s);// 取数据反序列化String suser opsForValue.get(klza:user:3);User user1 mapper.readValue(suser, User.class);System.out.println(user1); // User(id1, name王伟, age27)}
}