【Redis】SpringBoot整合Redis

野性酷女 2022-10-06 12:55 426阅读 0赞

SpringBoot操作数据:spring-data jpa jdbc redis。。。。
直接看spring 官方吧。上图
在这里插入图片描述

新建一个springboot项目
在这里插入图片描述
记得勾选NoSQL 下的Spring-Data Redis
在这里插入图片描述
说明:在springBoot2.x 版本之后 原来使用的jedis 被替换为lettuce
jedis:采用的是直连,多个线程操作的话,是不安全的,想要避免不安全,使用jedis pool连接池。BIO
lettuce:采用netty,实例可以在多个线程中共享,不存在线程不安全的情况。可以减少线程数量 NIO

在这里插入图片描述

测试代码

在这里插入图片描述在RedisAutoConfiguration中有RedisTemplate可以供我们直接使用

导入依赖
配置连接

  1. #配置redis
  2. spring.redis.host=127.0.0.1
  3. spring.redis.port=6379

测试

  1. @SpringBootTest
  2. class Redis02SpringbootApplicationTests {
  3. @Autowired
  4. private RedisTemplate redisTemplate;
  5. @Test
  6. void contextLoads() {
  7. // redisTemplate 操作不同的数据类型,api和我们的指令是一样的
  8. // opsForValue 操作字符串 类似String
  9. // opsForList 操作List 类似List
  10. // opsForSet
  11. // opsForHash
  12. // opsForZSet
  13. // opsForGeo
  14. // opsForHyperLogLog
  15. // 除了进本的操作,我们常用的方法都可以直接通过redisTemplate操作,比如事务,和基本的CRUD
  16. // 获取redis的连接对象
  17. // RedisConnection connection =
  18. redisTemplate.getConnectionFactory().getConnection();
  19. // connection.flushDb();
  20. // connection.flushAll();
  21. redisTemplate.opsForValue().set("name","xiangjun");
  22. System.out.println(redisTemplate.opsForValue().get("mykey"));
  23. }
  24. }

自定义redisTemplate

  1. @Configuration
  2. public class RedisConfig {
  3. @Bean
  4. @SuppressWarnings("all")
  5. public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
  6. RedisTemplate<String, Object> template = new RedisTemplate();
  7. //配置具体的序列化方式
  8. Jackson2JsonRedisSerializer<Object> objectJackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
  9. ObjectMapper objectMapper = new ObjectMapper();
  10. objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
  11. objectJackson2JsonRedisSerializer.setObjectMapper(objectMapper);
  12. //string的序列化
  13. StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
  14. //key采用string的序列化方式
  15. template.setKeySerializer(stringRedisSerializer);
  16. //key采用hash的序列化方式
  17. template.setHashKeySerializer(stringRedisSerializer);
  18. //key采用value的序列化方式
  19. template.setValueSerializer(objectJackson2JsonRedisSerializer);
  20. //hash的value序列化采用jsckson
  21. template.setHashValueSerializer(objectJackson2JsonRedisSerializer);
  22. template.setConnectionFactory(redisConnectionFactory);
  23. return template;
  24. }
  25. }

创建一个user对象

  1. @Component
  2. @Data
  3. @AllArgsConstructor
  4. @NoArgsConstructor
  5. public class User implements Serializable {
  6. private String name;
  7. private int age;
  8. }

测试

  1. @Test
  2. void test(){
  3. User xiang = new User("xiangjun", 18);
  4. try {
  5. String json = new ObjectMapper().writeValueAsString(xiang);
  6. redisTemplate.opsForValue().set("user",json);
  7. System.out.println(redisTemplate.opsForValue().get("user"));
  8. } catch (JsonProcessingException e) {
  9. e.printStackTrace();
  10. }
  11. }

输出结果
在这里插入图片描述

为什么要序列化?

好的 直接上redis-cli 看存储的你大概就明白了
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,426人围观)

还没有评论,来说两句吧...

相关阅读