Spring Boot整合Redis
1.新建Spring Boot项目
添加spring-boot-starter-data-redis依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
本文会根据StringRedisTemplate、RedisTemplate这两个模板来介绍,其中StringRedisTemplate继承自RedisTemplate,只能操作键值都是String类型的数据。在实际开发中建议使用RedisTemplate<K,V>。
查询源码可知RedisTemplate默认使用JdkSerializationRedisSerializer序列化,而StringRedisTemplate则使用StringRedisSerializer。
2.配置redis
######################################################## ###Redis (RedisConfiguration) ######################################################## spring.redis.database=1 spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password= spring.redis.pool.max-idle=8 spring.redis.pool.min-idle=0 spring.redis.pool.max-active=8 spring.redis.pool.max-wait=-1 spring.redis.timeout=5000
3.编写代码
1 package com.haq.entity; 2 3 import java.io.Serializable; 4 5 /** 6 * Created by on 2017/2/24. 7 */ 8 public class User implements Serializable { 9 10 private static final long serialVersionUId = 1L; 11 12 private String id; 13 private String name; 14 15 public User(){ 16 super(); 17 } 18 19 public String getId() { 20 return id; 21 } 22 23 public void setId(String id) { 24 this.id = id; 25 } 26 27 public String getName() { 28 return name; 29 } 30 31 public void setName(String name) { 32 this.name = name; 33 } 34 35 @Override 36 public String toString() { 37 return "User{" + 38 "id='" + id + '\'' + 39 ", name='" + name + '\'' + 40 '}'; 41 } 42 }
2.创建RedisService
1 package com.haq.common.redis; 2 3 import org.springframework.beans.factory.annotation.Autowired; 4 import org.springframework.data.redis.core.RedisTemplate; 5 import org.springframework.data.redis.core.StringRedisTemplate; 6 import org.springframework.data.redis.core.ValueOperations; 7 import org.springframework.stereotype.Service; 8 9 import javax.annotation.Resource; 10 11 /** 12 * Created by on 2017/3/1. 13 */ 14 @Service 15 public class RedisService { 16 17 @Autowired 18 StringRedisTemplate stringRedisTemplate; 19 20 21 @Resource(name = "stringRedisTemplate") 22 ValueOperations<String, String> valOpsStr; 23 24 @Autowired 25 RedisTemplate<Object, Object> redisTemplate; 26 27 @Resource(name = "redisTemplate") 28 ValueOperations<Object, Object> valOpsObj; 29 30 /** 31 * 根据指定key获取String 32 * @param key 33 * @return 34 */ 35 public String getStr(String key){ 36 return valOpsStr.get(key); 37 } 38 39 /** 40 * 设置Str缓存 41 * @param key 42 * @param val 43 */ 44 public void setStr(String key, String val){ 45 valOpsStr.set(key,val); 46 } 47 48 /** 49 * 删除指定key 50 * @param key 51 */ 52 public void del(String key){ 53 stringRedisTemplate.delete(key); 54 } 55 56 /** 57 * 根据指定o获取Object 58 * @param o 59 * @return 60 */ 61 public Object getObj(Object o){ 62 return valOpsObj.get(o); 63 } 64 65 /** 66 * 设置obj缓存 67 * @param o1 68 * @param o2 69 */ 70 public void setObj(Object o1, Object o2){ 71 valOpsObj.set(o1, o2); 72 } 73 74 /** 75 * 删除Obj缓存 76 * @param o 77 */ 78 public void delObj(Object o){ 79 redisTemplate.delete(o); 80 } 81 82 }
3.创建RedisController
package com.haq.web; import com.haq.common.redis.RedisService; import com.haq.entity.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * Created by on 2017/3/1. */ @RestController @RequestMapping("/redis") public class RedisController { @Autowired RedisService redisService; /** * 设置Str缓存 * @param key * @param val * @return */ @RequestMapping(value = "setStr") public String setStr(String key, String val){ try { redisService.setStr(key, val); return "success"; } catch (Exception e){ e.printStackTrace(); return "error"; } } /** * 根据key查询Str缓存 * @param key * @return */ @RequestMapping(value = "getStr") public String getStr(String key){ return redisService.getStr(key); } /** * 根据key产出Str缓存 * @param key * @return */ @RequestMapping(value = "delStr") public String delStr(String key){ try { redisService.del(key); return "success"; } catch (Exception e){ return "error"; } } /** * 设置obj缓存 * @param key * @param user * @return */ @RequestMapping(value = "setObj") public String setObj(String key, User user){ try { redisService.setObj(key, user); return "success"; } catch (Exception e){ e.printStackTrace(); return "error"; } } /** * 获取obj缓存 * @param key * @return */ @RequestMapping(value = "getObj") public Object getObj(String key){ return redisService.getObj(key); } /** * 删除obj缓存 * @param key * @return */ @RequestMapping(value = "delObj") public Object delObj(String key){ try { redisService.delObj(key); return "success"; } catch (Exception e){ e.printStackTrace(); return "error"; } } }
4.运行测试
1.StringRedisTemplate
http://127.0.0.1:8080/redis/setStr?key=aa&val=name
http://127.0.0.1:8080/redis/getStr?key=aa
http://127.0.0.1:8080/redis/delStr?key=aa
2.RedisTemplate
http://127.0.0.1:8080/redis/setObj?key=aa&id=1&name=test
http://127.0.0.1:8080/redis/getObj?key=aa
http://127.0.0.1:8080/redis/delObj?key=aa
以上地址都能通过测试,在这里就不一一截图了
后记
可以直接使用redistemplate来保存string类型,不过使用redis client看起来就不太直观,因为JdkSerializationRedisSerializer是使用二进制形式存储数据。
最后希望大家有问题能多多指教,O(∩_∩)O谢谢