Spring Boot整合Redis

打印 上一主题 下一主题

主题 649|帖子 649|积分 1947

Spring Boot整合Redis

        Spring Boot 整合 Redis 是一种常见的做法,用于在 Spring Boot 应用程序中添加缓存、会话管理分布式锁等功能。
浅谈Redis

        Redis用于存储数据,且在内存当中举行存储。
        但是在日常编写代码时,定义一个变量也就是属于在内存当中存储一个数据。
        Redis主要会在分布式体系当中发挥重要作用,如果是单机体系,直接通过变量存储数据的方式会比使用Redis更优。
为什么会使用Redis?

        主要原因是:当今的体系一样平常是分布式体系,存在多个进程,而进程是具有隔离性的。
        我们如果要在进程之间通信,就需要通过网络的方式。
   以是,Redis是基于网络的,可以把自己的内存中的变量给别的进程,乃至别的主机的进程进利用用。
  与MySQL对比

        MySQL存在一个最大的题目:访问数据的速率很慢。MySQL的数据存在于硬盘当中。
        许多互联网产物对于性能的要求极高。
        以是Redis也可以作为数据库进利用用。
   Redis固然快,但是存储空间小。
  是否能让Redis和MySQL的长处相联合?

        把常使用数据存放在Redis当中,将不常用的数据存储在MySQL当中。
        固然代价是有的,就是体系的复杂度提升。
        数据发生修改,还存在Redis和MySQL的数据同步题目。
浅谈Redis博客在右侧链接:浅谈Redis和分布式体系-CSDN博客
Spring Boot整合 Redis

Redis客户端

        Jedis和Lettuce是两个流行的Java Redis客户端库,它们都提供了对Redis数据库的访问和操作。下面是对这两个库的简要介绍:
Jedis


  • 简单性:Jedis的API计划直观,易于理解和使用。
  • 阻塞I/O:Jedis使用标准的Java阻塞I/O模子,这意味着在执行网络操作时,线程会被阻塞,直到操作完成。
  • 连接池:Jedis提供了一个简单的连接池实现,可以资助管理Redis连接。
  • 多线程:Jedis不是线程安全的,每个线程应该使用自己的Jedis实例,大概使用JedisPool来管理连接。
  • 支持集群:Jedis支持Redis集群模式,但需要使用JedisCluster类
Lettuce


  • 异步I/O:Lettuce基于Netty框架,使用非阻塞I/O模子,这意味着它可以在不阻塞线程的情况下执行网络操作,从而提高性能。
  • 相应式编程:Lettuce支持相应式编程模子,允许使用Project Reactor或Spring WebFlux等库举行编程。
  • 连接池:Lettuce提供了一个高级的连接池实现,支持主动重连和连接的主动管理,
  • 线程安全:Lettuce的API计划为线程安全,可以在多个线程之间共享同一个实例。
  • Redis集群和哨兵:Lettuce原生支持Redis集群和哨兵模式,提供了更高级的高可用性和分区功能。
选择Jedis还是Lettuce?

        选择哪个库取决于您的具体需求和偏好:
        如果您需要一个简单、直观的客户端,而且不介意使用阻塞I/O模子,Jedis大概是一个不错的选择。
        如果您正在构建一个高性能的应用程序,需要利用非阻塞I/O和异步编程的优势,大概需要原生支持Redis集群和哨兵,Lettuce大概是更好的选择。
RedisTemplate基本介绍

        RedisTemplate 提供了对 Redis 各种数据范例(如字符串、列表、集合、散列、有序集合等)的基本操作。

  • ValueOperations:简单K-V操作。
  • SetOperations:set范例数据操作。
  • ZSetOperations:zset范例数据操作。
  • HashOperations:针对map范例的数据操作。
  • ListOperations:list范例的数据操作。
RedisTemplate支持自定义序列化机制,允许你定义怎样序列化和反序列化存储在 Redis 中的对象。Spring Data Redis 默认使用 Java 的序列化机制,但你可以根据需要配置为 JSON 序列化、进制序列化等。
RedisTemplate和StringRedisTemplate的区别



  • StringRedisTemplate继承RedisTemplate。
  • 两者的数据是不共通的(默认的序列化机制导致key不一样)。
  • StringRedisTemplate默认采用的是String的序列化计谋。
  • RedisTemplate默认采用的是JDK的序列化计谋,会将数据先序列化成字节数组然后在存入Redis数据库。
总结:



  • 当redis数据库里面本来操作的是字符串数据的时间,那使用StringRedisTemplate即可。
  • 数据是复杂的对象范例,那么使用RedisTemplate是更好的选择。
6.2.4 RedisTemplate序列化和反序列化机制

什么是序列化



  • 把对象转换为字节序列的过程称为对象的序列化。
  • 把字节序列恢复为对象的过程称为对象的反序列化
对象的序列化主要有两种用途



  • 把对象的字节序列永世地保存到硬盘上,通常存放在一个文件中
  • 在网络上传送对象的字节序列。
Redis为什么要序列化



  • 性能可以提高,不同的序列化方式性能不一样。
  • 可视化工具更好查看
  • 采用默认的jdk方式会乱码(POJO类需要实现Serializable接口)
  • 采用JSON方式则不消,且可视化工具更好查看
自定义序列化

  1. @Configuration
  2. public class RedisTemplateConfiguration {
  3.     @Bean
  4.     public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
  5.         RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
  6.         redisTemplate.setConnectionFactory(redisConnectionFactory);
  7.         // 使用GenericJackson2JsonRedisSerializer 替换默认序列化
  8.         GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
  9.         // 设置key和value的序列化规则
  10.         redisTemplate.setKeySerializer(new StringRedisSerializer());
  11.         redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
  12.         // 设置hashKey和hashValue的序列化规则
  13.         redisTemplate.setHashKeySerializer(new StringRedisSerializer());
  14.         redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
  15.         redisTemplate.afterPropertiesSet();
  16.         return redisTemplate;
  17.     }
  18. }
复制代码
Redis实践

还是那个业务,这次将使用Spring Boot框架和Redis缓存来管理用户的信息。
   整个应用程序的业务逻辑是围绕用户信息的增(add)和查(get)操作展开的。使用Redis作为缓存层可以提高应用程序的性能,尤其是在读操作比写操作频繁的场景中。当用户信息被哀求时,应用程序首先检查Redis缓存,如果缓存中存在,则直接返回缓存的数据,否则从数据库中获取并缓存到Redis中。当新用户被添加时,用户信息被保存到数据库,并立即缓存到Redis中,以便后续的快速访问。
  用户控制器(UserController 类)
   REST控制器,所有的哀求基础路径为“/users”
  

  • getUserById(Stringid)方法通过用户的ID获取用户信息。它首先实验从Redis中获取用户信息,如果找不到,则假设从数据库中获取(这里代码中并没有实现数据库操作,只是创建了一个空的 User 对象作为示例)。
  • adduser (user user)方法添加一个新用户。同样,它首先假设将用户信息保存到数据库(这里没有实现数据库操作),然后将用户信息缓存到Redis中。
  1. @RestController
  2. @RequestMapping("/users")
  3. public class UserController {
  4.     @Autowired
  5.     private UserService userService;
  6.     @GetMapping("/{id}")
  7.     public User getUserById(@PathVariable String id) {
  8.         return userService.getUserById(id);
  9.     }
  10.     @PostMapping("/")
  11.     public User addUser(@RequestBody User user) {
  12.         return userService.addUser(user);
  13.     }
  14. }
复制代码
Redis ttl与key过期计谋

略,具体请访问右侧博客地址:Redis ttl与key过期计谋-CSDN博客
有关Redis其他内容,均放置于右侧博客专栏中:Redis的学习_写bug的小屁孩的博客-CSDN博客

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王海鱼

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表