Spring RedisTemplate 使用一则

RedisTemplate API

ValueOperations: 简单K-V操作 SetOperations: set类型数据操作 ZSetOperations: zset类型数据操作 HashOperations: 针对map类型的数据操作 ListOperations: 针对list类型的数据操作

stringRedisTemplate.opsForValue().set("test", "100",60*10,TimeUnit.SECONDS);//向redis里存入数据和设置缓存时间  
 
stringRedisTemplate.boundValueOps("test").increment(-1);//val做-1操作
 
stringRedisTemplate.opsForValue().get("test")//根据key获取缓存中的val
 
stringRedisTemplate.boundValueOps("test").increment(1);//val +1
 
stringRedisTemplate.getExpire("test")//根据key获取过期时间
 
stringRedisTemplate.getExpire("test",TimeUnit.SECONDS)//根据key获取过期时间并换算成指定单位 
 
stringRedisTemplate.delete("test");//根据key删除缓存
 
stringRedisTemplate.hasKey("546545");//检查key是否存在, 返回boolean值 
 
stringRedisTemplate.opsForSet().add("red_123", "1","2","3");//向指定key中存放set集合
 
stringRedisTemplate.expire("red_123",1000 , TimeUnit.MILLISECONDS);//设置过期时间
 
stringRedisTemplate.opsForSet().isMember("red_123", "1")//根据key查看集合中是否存在指定数据
 
stringRedisTemplate.opsForSet().members("red_123");//根据key获取set集合

无法 get 值?

redisTemplate.opsForValue().set(key, value);
Object val = redisTemplate.opsForValue().get(key);
 

DefaultValueOperations.DefaultValueOperations::set

public void set(K key, V value) {
 
		byte[] rawValue = rawValue(value);
		execute(new ValueDeserializingRedisCallback(key) {
 
			@Override
			protected byte[] inRedis(byte[] rawKey, RedisConnection connection) {
				connection.set(rawKey, rawValue);
				return null;
			}
		}, true);
	}

DefaultValueOperations.DefaultValueOperations::get

	public V get(Object key) {
 
		return execute(new ValueDeserializingRedisCallback(key) {
 
			@Override
			protected byte[] inRedis(byte[] rawKey, RedisConnection connection) {
				return connection.get(rawKey);
			}
		}, true);
	}

正真序列化处理的是: org.springframework.data.redis.core.AbstractOperations.ValueDeserializingRedisCallback

判断key序列化, 非 byte[] key 用RedisTemplate.getKeySerializer()的序列化对象

 
byte[] rawKey(Object key) {
    Assert.notNull(key, "non null key required");
    if (keySerializer() == null && key instanceof byte[]) {
        return (byte[]) key;
    }
    return keySerializer().serialize(key);
}
 
 
RedisSerializer keySerializer() {
    return template.getKeySerializer();
}