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方式则不消,且可视化工具更好查看
自定义序列化
- @Configuration
- public class RedisTemplateConfiguration {
- @Bean
- public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
- RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
- redisTemplate.setConnectionFactory(redisConnectionFactory);
- // 使用GenericJackson2JsonRedisSerializer 替换默认序列化
- GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
- // 设置key和value的序列化规则
- redisTemplate.setKeySerializer(new StringRedisSerializer());
- redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
- // 设置hashKey和hashValue的序列化规则
- redisTemplate.setHashKeySerializer(new StringRedisSerializer());
- redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
- redisTemplate.afterPropertiesSet();
- return redisTemplate;
- }
- }
复制代码 Redis实践
还是那个业务,这次将使用Spring Boot框架和Redis缓存来管理用户的信息。
整个应用程序的业务逻辑是围绕用户信息的增(add)和查(get)操作展开的。使用Redis作为缓存层可以提高应用程序的性能,尤其是在读操作比写操作频繁的场景中。当用户信息被哀求时,应用程序首先检查Redis缓存,如果缓存中存在,则直接返回缓存的数据,否则从数据库中获取并缓存到Redis中。当新用户被添加时,用户信息被保存到数据库,并立即缓存到Redis中,以便后续的快速访问。
用户控制器(UserController 类):
REST控制器,所有的哀求基础路径为“/users”
- getUserById(Stringid)方法通过用户的ID获取用户信息。它首先实验从Redis中获取用户信息,如果找不到,则假设从数据库中获取(这里代码中并没有实现数据库操作,只是创建了一个空的 User 对象作为示例)。
- adduser (user user)方法添加一个新用户。同样,它首先假设将用户信息保存到数据库(这里没有实现数据库操作),然后将用户信息缓存到Redis中。
- @RestController
- @RequestMapping("/users")
- public class UserController {
- @Autowired
- private UserService userService;
- @GetMapping("/{id}")
- public User getUserById(@PathVariable String id) {
- return userService.getUserById(id);
- }
- @PostMapping("/")
- public User addUser(@RequestBody User user) {
- return userService.addUser(user);
- }
- }
复制代码 Redis ttl与key过期计谋
略,具体请访问右侧博客地址:Redis ttl与key过期计谋-CSDN博客
有关Redis其他内容,均放置于右侧博客专栏中:Redis的学习_写bug的小屁孩的博客-CSDN博客
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |