什么是spring-data-redis
spring-data-redis是spring-data模塊的一部分,專門用來支持在spring管理項目對redis的操作;使用java操作redis最常用的是使用jedis,但並不是只有jedis可以使用,像jdbc-redis,jredis也都屬於redis的java客戶端,他們之間是無法兼容的,如果你在一個項目中使用了jedis,然后后來決定棄用掉改用jdbc-redis就比較麻煩了,spring-data-redis提供了redis的java客戶端的抽象,在開發中可以忽略掉切換具體的客戶端所帶來的影響,而且他本身就屬於spring的一部分,比起單純的使用jedis,更加穩定.管理起來更加自動化.(當然jedis的缺點不止以上);
spring-data-redis的特性
1.自動管理連接池,提供了一個高度封裝的RedisTemplate類
2.針對jedis客戶端的大量api進行了歸類封裝,把同一類型的操作封裝成了Operation接口.支持redis中的五種數據類型的操作.
3.針對數據的"序列化與反序列化",提供了多種可以選擇的策略(RedisSerializer)
JdkSerializationRedisSerializer:當需要存儲java對象時使用.
StringRedisSerializer:當需要存儲string類型的字符串時使用.
JacksonJsonRedisSerializer:將對象序列化成json的格式存儲在redis中,需要jackson-json工具的支持;
使用spring-data-redis
注意:如果需要向redis內存儲pojo對象,那么該對象必須要實現Serializable接口,因為在redis中存儲pojo類仍然存儲的是string,它會把數據轉化成byte[]數組的形式,在存取的時候就要對數據格式進行轉化,就涉及到了序列化與反序列化.
public class User implements Serializable { private static final long serialVersionUID = 1L; /** 用戶ID */ private Long id; /** 用戶名 */ private String name; /** 用戶年齡 */ private Integer age; }
@Controller public class UserController extends BaseController { @Autowired private IUserService userService; @Autowired private RedisTemplate<String,User> redisTemplate; @ResponseBody @RequestMapping("/redis") public Object redis() { User u1=new User(); u1.setId(1L); u1.setName("wang"); u1.setAge(22); redisTemplate.opsForValue().set("user:wang",u1); User u2=redisTemplate.opsForValue().get("user:wang"); return u2; } }