上文我们介绍了 Redis,在开发环境中,我们还有另外一个解决方案,那就是 Spring Data Redis 。本文我们就来看看这个东西。
本文是 Redis 系列的第十四篇文章,了解前面的文章有助于更好的理解本文:
1.Linux 上安装 Redis 2.Redis 中的五种数据类型简介 3.Redis 字符串 (STRING) 介绍 4.Redis 字符串 (STRING) 中 BIT 相关命令 5.Redis 列表与集合 6.Redis 散列与有序集合 7.Redis 中的发布订阅和事务 8.Redis 快照持久化 9.Redis 之 AOF 持久化 10.Redis 主从复制(一) 11.Redis 主从复制(二) 12.Redis 集群搭建 13.Jedis 使用
Spring Data Redis 介绍 Spring Data Redis 是 Spring 官方推出,可以算是 Spring 框架集成 Redis 操作的一个子框架,封装了 Redis 的很多命令,可以很方便的使用 Spring 操作 Redis 数据库,Spring 对很多工具都提供了类似的集成,如 Spring Data MongDB、Spring Data JPA 等, Spring Data Redis 只是其中一种。
环境搭建 要使用 SDR,首先需要搭建 Spring+SpringMVC 环境,由于这个不是本文的重点,因此这一步我直接略过,Spring+SpringMVC 环境搭建成功后,接下来我们要整合 SDR,首先需要添加如下依赖:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <dependency > <groupId > redis.clients</groupId > <artifactId > jedis</artifactId > <version > 2.9.0</version > </dependency > <dependency > <groupId > org.springframework.data</groupId > <artifactId > spring-data-redis</artifactId > <version > RELEASE</version > </dependency > <dependency > <groupId > org.apache.commons</groupId > <artifactId > commons-pool2</artifactId > <version > RELEASE</version > </dependency >
然后创建在 resources 目录下创建 redis.properties 文件作为 redis 的配置文件,如下:
1 2 3 4 5 6 redis.host=192.168.248.128 redis.port=6379 redis.maxIdle=300 redis.maxTotal=600 redis.maxWait=1000 redis.testOnBorrow=true
在 spring 的配置文件中,添加如下 bean:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 <context:property-placeholder location ="classpath:redis.properties" /> <bean class ="redis.clients.jedis.JedisPoolConfig" id ="poolConfig" > <property name ="maxIdle" value ="${redis.maxIdle}" /> <property name ="maxTotal" value ="${redis.maxTotal}" /> <property name ="maxWaitMillis" value ="${redis.maxWait}" /> <property name ="testOnBorrow" value ="${redis.testOnBorrow}" /> </bean > <bean class ="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" id ="connectionFactory" > <property name ="hostName" value ="${redis.host}" /> <property name ="port" value ="${redis.port}" /> <property name ="poolConfig" ref ="poolConfig" /> </bean > <bean class ="org.springframework.data.redis.core.RedisTemplate" id ="redisTemplate" > <property name ="connectionFactory" ref ="connectionFactory" /> <property name ="keySerializer" > <bean class ="org.springframework.data.redis.serializer.StringRedisSerializer" /> </property > <property name ="valueSerializer" > <bean class ="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" /> </property > </bean >
好了,在 Spring 中配置了 redisTemplate 之后,接下来我们就可以在 Dao 层注入 redisTemplate 进而使用了。
接下来我们首先创建实体类 User ,注意 User 一定要可序列化:
1 2 3 4 5 6 public class User implements Serializable { private String username; private String password; private String id; }
然后在 Dao 层实现数据的添加和获取,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 @Repository public class HelloDao { @Autowired RedisTemplate redisTemplate; public void set (String key, String value) { ValueOperations ops = redisTemplate.opsForValue(); ops.set(key, value); } public String get (String key) { ValueOperations ops = redisTemplate.opsForValue(); return ops.get(key).toString(); } public void setuser (User user) { ValueOperations ops = redisTemplate.opsForValue(); ops.set(user.getId(), user); } public User getuser (String id) { ValueOperations<String, User> ops = redisTemplate.opsForValue(); User user = ops.get(id); System.out.println(user); return user; } }
SDR 官方文档中对 Redistemplate 的介绍,通过 Redistemplate 可以调用 ValueOperations 和 ListOperations 等等方法,分别是对 Redis 命令的高级封装。但是 ValueOperations 等等这些命令最终是要转化成为 RedisCallback 来执行的。也就是说通过使用 RedisCallback 可以实现更强的功能。
最后,给大家展示下我的 Service 和 Controller ,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 @Service public class HelloService { @Autowired HelloDao helloDao; public void set (String key, String value) { helloDao.set(key,value); } public String get (String key) { return helloDao.get(key); } public void setuser (User user) { helloDao.setuser(user); } public String getuser (String id) { String s = helloDao.getuser(id).toString(); return s; } } Controller: @Controller public class HelloController { @Autowired HelloService helloService; @RequestMapping ("/set" ) @ResponseBody public void set (String key, String value) { helloService.set(key, value); } @RequestMapping ("/get" ) @ResponseBody public String get (String key) { return helloService.get(key); } @RequestMapping ("/setuser" ) @ResponseBody public void setUser () { User user = new User(); user.setId("1" ); user.setUsername("深圳" ); user.setPassword("sang" ); helloService.setuser(user); } @RequestMapping (value = "/getuser" ,produces = "text/html;charset=UTF-8" ) @ResponseBody public String getUser () { return helloService.getuser("1" ); } }
测试过程就不再展示了,小伙伴们可以用 POSTMAN 等工具自行测试。
好了,Spring Data Redis 我们就说到这里,有问题欢迎留言讨论。