深入实践Spring Boot2.2.2 创建Redis服务类

2.2.2 创建Redis服务类

Redis提供了下列几种数据类型可供存取:

string;

hash;

list;

set及zset。

在实例中,将使用string即字符串的类型来演示数据的存取操作。对于Redis,Spring Boot没有提供像JPA那样相应的资源库接口,所以只能仿照上一节中Repository的定义编写一个实体User的服务类,如代码清单2-10所示。这个服务类可以存取对象User以及由User组成的列表List,同时还提供了一个删除的方法。所有这些方法都是使用RedisTemplate来实现的。

代码清单2-10 用户实体的Redis服务类

@Repository

public class
UserRedis {

    @Autowired

    private RedisTemplate<String, String>
redisTemplate;

 

    public void add(String key, Long time,User
user) {

        Gson gson = new Gson();

        redisTemplate.opsForValue().set(key,
gson.toJson(user), time, TimeUnit.

MINUTES);

    }

 

    public void add(String key, Long time,
List<User> users) {

        Gson gson = new Gson();

        redisTemplate.opsForValue().set(key,
gson.toJson(users), time, TimeUnit.

MINUTES);

    }

 

    public User get(String key) {

        Gson gson = new Gson();

        User user = null;

        String userJson =
redisTemplate.opsForValue().get(key);

        if(!StringUtils.isEmpty(userJson))

            user = gson.fromJson(userJson,
User.class);

        return user;

    }

 

    public List<User> getList(String key)
{

        Gson gson = new Gson();

        List<User> ts = null;

        String listJson =
redisTemplate.opsForValue().get(key);

        if(!StringUtils.isEmpty(listJson))

            ts = gson.fromJson(listJson, new
TypeToken<List<User>>(){}.getType());

        return ts;

    }

 

    public void delete(String key){

       
redisTemplate.opsForValue().getOperations().delete(key);

    }

}

Redis没有表结构的概念,所以要实现MySQL数据库中表的数据(即普通Java对象映射的实体数据)在Redis中存取,必须做一些转换,使用JSON格式的文本作为Redis与Java普通对象互相交换数据的存储格式。这里使用Gson工具将类对象转换为JSON格式的文本进行存储,要取出数据时,再将JSON文本数据转化为Java对象。

因为Redis使用了key-value的方式存储数据,所以存入时要生成一个唯一的key,而要查询或者删除数据时,就可以使用这个唯一的key进行相应的操作。

保存在Redis数据库中的数据默认是永久存储的,可以指定一个时限来确定数据的生命周期,超过指定时限的数据将被Redis自动清除。在代码清单2-10中我们以分钟为单位设定了数据的存储期限。

另外,为了能正确调用RedisTemplate,必须对其进行一些初始化工作,即主要对它存取的字符串进行一个JSON格式的系列化初始配置,如代码清单2-11所示。

代码清单2-11 RedisTemplate初始化

@Configuration

public class
RedisConfig {

 

    @Bean

    public RedisTemplate<String, String>
redisTemplate(

            RedisConnectionFactory factory) {

        StringRedisTemplate 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;

    }

 

}

时间: 2024-09-27 22:25:31

深入实践Spring Boot2.2.2 创建Redis服务类的相关文章

深入实践Spring Boot2.2.3 Redis测试

2.2.3 Redis测试 如果还没有安装Redis服务器,可以参照本书附录C提供的方法安装,然后在工程的配置文件application.yml中配置连接Redis服务器等参数,如代码清单2-12所示.其中host和port分别表示Redis数据库服务器的IP地址和开放端口,database可以不用指定,由Redis根据存储情况自动选定(注:测试时这些配置是集成在一个配置类中实现的). 代码清单2-12 Redis配置 spring:     redis:     # database: 1  

深入实践Spring Boot2.2 使用Redis

2.2 使用Redis 关系型数据库在性能上总是存在一些这样那样的缺陷,所以大家有时候在使用传统关系型数据库时,会与具有高效存取功能的缓存系统结合使用,以提高系统的访问性能.在很多流行的缓存系统中,Redis是一个不错的选择.Redis是一种可以持久存储的缓存系统,是一个高性能的key-value数据库,它使用键-值对的方式来存储数据.

深入实践Spring Boot2.2.1 Redis依赖配置

2.2.1 Redis依赖配置 需要使用Redis,可在工程的Maven配置中加入spring-boot-starter-redis依赖,如代码清单2-9所示.其中gson是用来转换Json数据格式的工具,mysql是引用了上一节的模块,这里使用2.1节定义的实体对象来存取数据,演示在Redis中的存取操作. 代码清单2-9 Redis模块的Maven依赖配置 <dependencies>     <dependency>         <groupId>org.sp

深入实践Spring Boot2.5 小结

2.5 小结 这一章,我们一口气学习使用了4种数据库:MySQL.Redis.MongoDB.Neo4j,除了Redis以外,都使用了由Spring Boot提供的资源库来访问数据库并对数据库执行了一般的存取操作.可以看出,在Spring Boot框架中使用数据库非常简单.容易,这主要得益于Spring Boot资源库的强大功能,Spring Boot资源库整合了第三方资源,它把复杂的操作变成简单的调用,它把所有"辛苦.繁重的事情"都包揽了,然后将"微笑和鲜花"献给

深入实践Spring Boot2.1.2 实体建模

2.1.2 实体建模 首先创建一些普通对象,用来与数据库的表建立映射关系,接着演示如何使用JPA对数据库进行增删查改等存取操作. 假如现在有三个实体:部门.用户和角色,并且它们具有一定的关系,即一个用户只能隶属于一个部门,一个用户可以拥有多个角色.它们的关系模型如图2-1所示.   图2-1 MySQL实体-关系模型示例 Spring Boot的实体建模与使用Spring框架时的定义方法一样,同样比较方便的是使用了注解的方式来实现. 部门实体的建模如代码清单2-2所示,其中注解@Table指定关

深入实践Spring Boot1.2 创建项目工程

1.2 创建项目工程 现在,可以尝试使用IDEA来创建一个项目工程.如果是第一次打开IDEA,可以选择Create New Project创建一个新工程.如果已经打开了IDEA,在File菜单中选择New Project,也能打开New Project对话框,如图1-6所示.使用IDEA创建一个Spring Boot项目有很多方法,这里只介绍使用Maven和Spring Initializr这两种方法来创建一个新项目.一般使用Maven来新建一个项目,因为这样更容易按我们的要求配置一个项目.

深入实践Spring Boot2.4.4 Neo4j测试

2.4.4 Neo4j测试 代码清单2-24是Neo4j的数据库配置类,其中@Enable-TransactionManagement启用了事务管理,@EnableNeo4jRe-positories启用了Neo4j资源库并指定了我们定义的资源库接口的位置,在重载的SessionFactory函数中设定了定义实体的位置,这将促使定义的实体被作为域对象导入,RemoteServer设定连接Neo4j服务器的URL.用户名和密码,这些参数要依据安装Neo4j服务器的情况来设置.如果还没有安装Neo4

深入实践Spring Boot2.1 使用MySQL

2.1 使用MySQL 对于传统关系型数据库来说,Spring Boot使用JPA(Java Persistence API)资源库来实现对数据库的操 作,使用MySQL也是如此.简单地说,JPA就是为POJO(Plain Ordinary Java Object)提供持久化的标准规 范,即将Java的普通对象通过对象关系映射(Object-Relational Mapping,ORM)持久化到数据库中.

深入实践Spring Boot2.3.1 MongoDB依赖配置

2.3.1 MongoDB依赖配置 在Spring Boot中使用MongoDB也像使用JPA一样容易,并且同样拥有功能完善的资源库.同样的,要使用MongoDB,首先必须在工程的Maven中引入它的依赖,如代码清单2-14所示.除了MongoDB本身的依赖之外,还需要一些附加的工具配套使用. 代码清单2-14 使用MongoDB的Maven依赖配置 <dependencies>     <dependency>         <groupId>org.springf