基於RedisTemplate的redis工具類
阿新 • • 發佈:2019-01-07
RedisTempla是一個spring-redis模組下的操作redis的工具類,有點類似於jdbcTemplate。
但是操作起來略顯麻煩,於是封裝一個稍微簡單點的redis工具類,直接上程式碼:
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.ValueOperations; import java.util.Set; import java.util.concurrent.TimeUnit; @SuppressWarnings("unchecked") public class RedisUtil { private RedisTemplate<String, Object> redisTemplate; private StringRedisTemplate stringRedisTemplate; private String namespace = "work:"; public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) { this.redisTemplate = redisTemplate; } public void setStringRedisTemplate(StringRedisTemplate stringRedisTemplate) { this.stringRedisTemplate = stringRedisTemplate; } public void setNamespace(String namespace) { if (namespace != null) this.namespace = namespace + ":"; } public void set(String k, Object v, long time) { String key = namespace + k; if (v instanceof String && stringRedisTemplate != null) { stringRedisTemplate.opsForValue().set(key, (String) v); } else { redisTemplate.opsForValue().set(key, v); } if (time > 0) redisTemplate.expire(key, time, TimeUnit.SECONDS); } public void set(String k, Object v) { set(k, v, -1); } public boolean contains(String key) { return redisTemplate.hasKey(namespace + key); } public String get(String k) { if (stringRedisTemplate != null) { return stringRedisTemplate.opsForValue().get(namespace + k); } else { return (String) redisTemplate.opsForValue().get(namespace + k); } } public <T> T getObject(String k) { ValueOperations<String, Object> valueOps = redisTemplate.opsForValue(); return (T) valueOps.get(namespace + k); } public void remove(String key) { redisTemplate.delete(namespace + key); } public long getExpire(String key) { return redisTemplate.getExpire(key); } public Set<String> keys(String pattern) { return redisTemplate.keys(namespace + pattern); } public Long increment(String key, long delta) { return redisTemplate.opsForValue().increment(namespace + key, delta); } public Double increment(String key, double delta) { return redisTemplate.opsForValue().increment(namespace + key, delta); } }
spring boot的配置:
@Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(factory); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); RedisSerializer<String> stringSerializer = new StringRedisSerializer(); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); template.setValueSerializer(jackson2JsonRedisSerializer); template.setKeySerializer(stringSerializer); template.afterPropertiesSet(); return template; } @Bean public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory factory) { StringRedisTemplate template = new StringRedisTemplate(factory); RedisSerializer<String> stringSerializer = new StringRedisSerializer(); template.setKeySerializer(stringSerializer); template.setValueSerializer(stringSerializer); template.setHashKeySerializer(stringSerializer); template.setKeySerializer(stringSerializer); template.afterPropertiesSet(); return template; } @Bean public RedisUtil redisUtil(RedisTemplate<String, Object> redisTemplate, StringRedisTemplate stringRedisTemplate) { RedisUtil redisUtil = new RedisUtil(); redisUtil.setRedisTemplate(redisTemplate); redisUtil.setStringRedisTemplate(stringRedisTemplate); redisUtil.setNamespace("xxx"); return redisUtil; }
呼叫:
@Autowired
private RedisUtil redisUtil;
redisUtil.set("test", "abc");
redisUtil.get("test");
User user = new User();
user.setId(1L);
user.setName("Eric");
redisUtil.set("user", user );
User user1 = redisUtil.getObject("user");