上海做网站的公司联系方式,wordpress页面链接,做网站需要什么学专业,wordpress域名404Spring Boot整合Redis Spring Boot 整合 Redis 是一种常见的做法#xff0c;用于在 Spring Boot 应用程序中添加缓存、会话管理分布式锁等功能。
浅谈Redis Redis用于存储数据#xff0c;且在内存当中进行存储。 但是在日常编写代码时#xff0c;定义一个变量也就是属于在内…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/OJedis使用标准的Java阻塞I/O模型这意味着在执行网络操作时线程会被阻塞直到操作完成。连接池Jedis提供了一个简单的连接池实现可以帮助管理Redis连接。多线程Jedis不是线程安全的每个线程应该使用自己的Jedis实例或者使用JedisPool来管理连接。支持集群Jedis支持Redis集群模式但需要使用JedisCluster类
Lettuce
异步I/OLettuce基于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操作。SetOperationsset类型数据操作。ZSetOperationszset类型数据操作。HashOperations针对map类型的数据操作。ListOperationslist类型的数据操作。
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 {Beanpublic RedisTemplateObject, Object redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisTemplateObject, 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 {Autowiredprivate 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博客