声明:redis作为NOSQL的典型代表,已经在我们的应用服务系统中扮演着重要的角色。redis作为NOSQL数据库的一种,在数据缓存、分布式锁、SSO设计、原子操作(集成Lua脚本)承担着重要的作用。今天就spring boot中有关redis的模板化应用做一个简要总结。(更多的有关redis的内容和应用请继续关注该博客)
下面开始spring-boot 集成 redis的应用实例。
1、在pom中引用spring -boot-starter-redis的依赖包
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.2.4</version> </dependency>2、在application.properties文件中配置相关属性内容
(本机单机测试,如需要进行集群配置,请参考redis集群配置)
#redis相关配置 spring.redis.database=1 spring.redis.host=localhost spring.redis.port=6379 spring.redis.pool.max-idle=8 spring.redis.pool.min-idle=0 spring.redis.pool.max-active=8 spring.redis.pool.max-wait=-13、配置conf
@Configuration @EnableAutoConfiguration public class RedisConfig { @Bean public RedisTemplate<String,String> redisTemplate(RedisConnectionFactory redisConnectionFactory){ StringRedisTemplate template = new StringRedisTemplate(redisConnectionFactory); 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; } }4、我们就可以使用redisTemplate去完成数据的操作,就不用去关心底层的实现问题(如果不喜欢这种配置操作,方可采取原生jedis API进行数据操作)
@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> getUserList(String key){ Gson gson = new Gson(); List<User> userList = null; String userListJson = redisTemplate.opsForValue().get(key); if(!StringUtils.isEmpty(userListJson)){ userList = gson.fromJson(userListJson,new TypeToken<List<User>>(){}.getType()); } return userList; } public void delete(String key){ redisTemplate.opsForValue().getOperations().delete(key); } }注:redis的数据格式有五种(String 、list 、set、hash、zset)。目前的实例demo仅就String一种数据格式做了简单介绍。具体的其他类型数据操作于此大同小异,要明白redisTemplate带给我们的便利性。
redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set
---------------------------------------------------------------------------------------------------------
更多有关redisTemplate的相关操作请参考如何使用redisTemplate