欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringBoot项目中使用redis缓存的方法步骤

程序员文章站 2023-12-04 11:42:10
本文介绍了springboot项目中使用redis缓存的方法步骤,分享给大家,具体如下: spring data redis为我们封装了redis客户端的各种操作,简化使...

本文介绍了springboot项目中使用redis缓存的方法步骤,分享给大家,具体如下:

spring data redis为我们封装了redis客户端的各种操作,简化使用。

- 当redis当做数据库或者消息队列来操作时,我们一般使用redistemplate来操作

- 当redis作为缓存使用时,我们可以将它作为spring cache的实现,直接通过注解使用

1.概述

在应用中有效的利用redis缓存可以很好的提升系统性能,特别是对于查询操作,可以有效的减少数据库压力。

具体的代码参照该

2.添加引用

在build.gradle加入

compile('org.springframework.boot:spring-boot-starter-data-redis')

springboot会自动引入redis相关的jar包。加入该引用后,需要在本地安装redis并启动,否则程序启动时会报错。

3.通过注解启用缓存

在springboot中启用redis非常简单,只需要在application主类上添加@enablecaching注解,之后在需要启用缓存的查询方法上添加@cacheable注解。

@springbootapplication
@enablecaching
public class demoapplication implements commandlinerunner{
...

查询接口:

public interface testrepository extends jparepository<test, integer> {
  @cacheable(value = "testcache")
  public test findone(integer id);
}

实体类需要实现serializable接口,否则程序会报错,因为无法把java对象序列化到redis中。springboot中redis默认使用defaultserializer,这个用的是jdk自身的序列化方法。

总共有以下几种序列化方法,具体的使用场景可以参考官方文档

1. genericjackson2jsonredisserializer
2. generictostringserializer
3. jackson2jsonredisserializer
4. jacksonjsonredisserializer
5. jdkserializationredisserializer
6. oxmserializer
7. stringredisserializer

至此我们的程序就具有了从redis缓存中查询数据的能力,如果对redis中存储的key的美观程度不介意的话,工作到此就结束了。

4.美观的key

执行我们的程序以后,在redis-cli中执行key *命令,会发现key的值是一堆类似于乱码的东西:

"testcache:\xac\xed\x00\x05sr\x00\x11java.lang.integer\x12\xe2\xa0\xa4\xf7\x81\x878\x02\x00\x01i\x00\x05valuexr\x00\x10java.lang.number\x86\xac\x95\x1d\x0b\x94\xe0\x8b\x02\x00\x00xp\x00\x00\x00\x01"
这中key值对于redis的运维人员来说估计是不可接受的,我们要想办法让key值变的好看一些,至少要让人能看得懂。

出现上面的key值的原因就是spring中默认采用了simplekey这个类来生成redis的key。

解决方法也很简单,增加缓存配置,指定redis生成key的方式:

@configuration
public class cacheconfig extends cachingconfigurersupport {

  @autowired
  private redistemplate redistemplate;

  @bean
  public cachemanager cachemanager() {

    redistemplate.setkeyserializer(new generictostringserializer<object>(object.class));

    rediscachemanager cachemanager = new rediscachemanager(redistemplate);
    cachemanager.setdefaultexpiration(3600);
    cachemanager.setuseprefix(true);
    cachemanager.setcacheprefix(new rediscacheprefix() {
      private final redisserializer<string> serializer = new stringredisserializer();
      private final string delimiter = ":";

      public byte[] prefix(string cachename) {
        return this.serializer
            .serialize(cachename.concat(this.delimiter));
      }
    });

    return cachemanager;
  }
}

其中

复制代码 代码如下:

redistemplate.setkeyserializer(new generictostringserializer<object>(object.class));

这行代码指定了redis中key值的生成方式,generictostringserializer这个序列化方法会把java对象转换为字符串存储到redis中。

5.总结

在springboot中启用redis缓存非常简单,只需要加几个注解即可。同时我们可以通过增加缓存配置的方式,让存储到redis中的key值具有良好的可读性,而不是一堆类似于乱码的数据。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。