SpringBoot整合Redis之SpringDataRedis

秒速五厘米 2022-05-25 06:09 336阅读 0赞

添加依赖:

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-redis</artifactId>
  4. lt;/dependency>

application.properties:

  1. #redis配置
  2. spring.redis.database=0
  3. spring.redis.host=127.0.0.1
  4. spring.redis.port=6379
  5. spring.redis.password=123
  6. spring.redis.pool.max-idle=8
  7. spring.redis.pool.min-idle=0
  8. spring.redis.pool.max-active=8
  9. spring.redis.pool.max-wait=-1
  10. spring.redis.timeout=5000

配置类:

  1. @Configuration
  2. /**开启SpringBoot支持的缓存功能 使用Nosql或者数据库的时候 当查询的时候会缓存数据*/
  3. @EnableCaching
  4. public class RedisConfig {
  5. @Bean
  6. public CacheManager cacheManager(RedisTemplate<?,?> redisTemplate) {
  7. CacheManager cacheManager = new RedisCacheManager(redisTemplate);
  8. return cacheManager;
  9. }
  10. @Primary
  11. @Bean
  12. public RedisTemplate<String, Object> redisTemplate(JedisConnectionFactory factory) {
  13. /**spring data redis 提供多个序列化器 序列化转成json*/
  14. /* RedisTemplate template = new StringRedisTemplate(factory); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); template.setValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template;*/
  15. RedisTemplate<String, Object> redisTemplate = new RedisTemplate
  16. <String, Object>();
  17. redisTemplate.setConnectionFactory(factory);
  18. return redisTemplate;
  19. }
  20. @Bean
  21. public StringRedisTemplate stringRedisTemplate(JedisConnectionFactory factory) {
  22. StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
  23. stringRedisTemplate.setConnectionFactory(factory);
  24. return stringRedisTemplate;
  25. }
  26. }

redis提供两种序列化方式:

一种是String的序列化策略(RedisTemplate)可以保存对象,一种是JDK的序列化策略(StringRedisTemplate)操作String数据。
除此之外:spring data redis 提供多个序列化器

  1. GenericToStringSerializer:使用 Spring 转换服务进行序列化;
  2. JacksonJsonRedisSerializer:使用 Jackson 1,将对象序列化为 JSON
  3. Jackson2JsonRedisSerializer:使用 Jackson 2,将对象序列化为 JSON
  4. JdkSerializationRedisSerializer:使用 Java 序列化;
  5. OxmSerializer:使用 Spring O/X 映射的编排器和解排器(marshaler unmarshaler)实
  6. 现序列化,用于 XML 序列化;
  7. StringRedisSerializer:序列化 String 类型的 key value

redis的五种数据结构:

  1. ValueOperations:字符串类型操作
  2. ListOperations:列表类型操作
  3. SetOperations:集合类型操作
  4. ZSetOperations:有序集合类型操作
  5. HashOperations:散列操作
  6. spring 封装了 RedisTemplate 对象来进行对redis的各种操作,它支持所有的 redis 原生的 api
  7. RedisTemplate中定义了对5种数据结构操作
  8. 1 redisTemplate.opsForValue();//操作字符串
  9. 2 redisTemplate.opsForHash();//操作hash
  10. 3 redisTemplate.opsForList();//操作list
  11. 4 redisTemplate.opsForSet();//操作set
  12. 5 redisTemplate.opsForZSet();//操作有序set
  13. BoundValueOperations:字符串类型操作
  14. BoundListOperations:列表类型操作
  15. BoundSetOperations:集合类型操作
  16. BoundZSetOperations:有序集合类型操作
  17. BoundHashOperations:散列操作
  18. BoundValueOperations<String, String> valueOperations = stringRedisTemplate.boundValueOps("key");
  19. BoundListOperations<String, String> listOperations = stringRedisTemplate.boundListOps("key");
  20. BoundSetOperations<String, String> setOperations = stringRedisTemplate.boundSetOps("key");
  21. BoundZSetOperations<String, String> zSetOperations = stringRedisTemplate.boundZSetOps("key");
  22. BoundHashOperations<String, Object, Object> hashOperations = stringRedisTemplate.boundHashOps("key");

 redisTemplate有两个方法经常用到,一个是opsForXXX一个是boundXXXOps,XXX是value的类型,前者获取到一个Opercation,但是没有指定操作的key,可以在一个连接(事务)内操作多个key以及对应的value;后者会获取到一个指定了key的operation,在一个连接内只操作这个key对应的value.

Service:

  1. @Service
  2. public class RedisService {
  3. /** * StringRedisTemplate * 也可以是RedisTemplate template; * 只是两种序列化策略不同 * 一种是String的序列化策略,储存String类型数据 * 一种是JDK的序列化策略。可以存储对象类型数据 **/
  4. @Autowired
  5. StringRedisTemplate stringRedisTemplate;
  6. @Autowired
  7. RedisTemplate template;
  8. /** * 存储对象 */
  9. public void addUser(String key, User user) {
  10. template.opsForValue().set(key, user);
  11. }
  12. /** * 存储String数据 */
  13. public void addString(String key, String string) {
  14. stringRedisTemplate.opsForValue().set(key, string);
  15. }
  16. /** * 获取对象 */
  17. public User getUser(String key) {
  18. User user = (User) template.opsForValue().get(key);
  19. return user;
  20. }
  21. /** * 获取String */
  22. public String getString(String key) {
  23. String str = stringRedisTemplate.opsForValue().get(key);
  24. return str;
  25. }
  26. /** * 获取String */
  27. public String getString2(String key) {
  28. /**和前面的方法一样 只不过绑定了key*/
  29. BoundValueOperations<String, String> boundValueOperations = stringRedisTemplate.boundValueOps(key);
  30. String str = boundValueOperations.get();
  31. return str;
  32. }
  33. /** * 存储String设置过期时间 */
  34. public String addStringLimitTime(String key, String value) {
  35. /** 3秒过期*/
  36. stringRedisTemplate.opsForValue().set(key, value, 3, TimeUnit.SECONDS);
  37. return "ok";
  38. }
  39. /** * 删除redis存储所有的数据 */
  40. public void delete() {
  41. Set<String> set = stringRedisTemplate.keys("*");
  42. System.out.println(set.size());
  43. stringRedisTemplate.delete(set);
  44. System.out.println("删除成功");
  45. }
  46. /** * 删除redis存储所有的数据 */
  47. public void delete2() {
  48. Set<String> set = template.keys("*");
  49. System.out.println(set.size());
  50. template.delete(set);
  51. System.out.println("删除成功");
  52. }
  53. }

Controller测试:

  1. @Controller
  2. public class RedisController {
  3. @Autowired
  4. RedisService redisService;
  5. /** * 存储对象测试 */
  6. @RequestMapping("/addUser")
  7. @ResponseBody
  8. public String addUser() {
  9. User user = new User(1, "A", "123");
  10. redisService.addUser("userA", user);
  11. return "ok";
  12. }
  13. /** * 获取对象测试 */
  14. @RequestMapping("/getUser")
  15. @ResponseBody
  16. public User getUser() {
  17. User user = redisService.getUser("userA");
  18. return user;
  19. }
  20. /** * 存储String测试 */
  21. @RequestMapping("/addString")
  22. @ResponseBody
  23. public String addString() {
  24. redisService.addString("str1", "String1");
  25. return "ok";
  26. }
  27. /** * 获取String测试 */
  28. @RequestMapping("/getString")
  29. @ResponseBody
  30. public String getString() {
  31. String string = redisService.getString("str1");
  32. return string;
  33. }
  34. /** * 获取String测试 */
  35. @RequestMapping("/getString2")
  36. @ResponseBody
  37. public String getString2() {
  38. String string = redisService.getString2("str1");
  39. return string;
  40. }
  41. /** * 过期时间测试 */
  42. @RequestMapping("/addLimitTime")
  43. @ResponseBody
  44. public String addLimitTime() {
  45. String string = redisService.addStringLimitTime("time", "timeValue");
  46. return string;
  47. }
  48. /** * 过期时间测试 */
  49. @RequestMapping("/getLimitTime")
  50. @ResponseBody
  51. public String getLimitTime() {
  52. String string = redisService.getString("time");
  53. return string;
  54. }
  55. /**清除缓存*/
  56. @RequestMapping("/remove")
  57. @ResponseBody
  58. public String delete(){
  59. redisService.delete();
  60. return "ok";
  61. }
  62. }

发表评论

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

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

相关阅读