工作日记2017.08.19 spring-data-redis使用

来源:互联网 发布:sql中exists的用法 编辑:程序博客网 时间:2024/05/12 20:38

JedisConnectionFactory是连接工厂,通过配置单台服务器或连接池(pool)的方式获取redis服务器的连接

@Primary    @Bean(name="redisTemplate")    public RedisTemplate redisTemplate(JedisConnectionFactory factory) {        RedisTemplate rt = new RedisTemplate();        FastJsonSerializer fastJsonSerializer = new FastJsonSerializer();        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();        rt.setConnectionFactory(factory);        rt.setKeySerializer(stringRedisSerializer);        rt.setValueSerializer(fastJsonSerializer);        rt.setHashKeySerializer(fastJsonSerializer);        rt.afterPropertiesSet();        return rt;    }

RedisTemplate快速完成基本的crud操作

public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperations<K, V>, BeanClassLoaderAware

StringRedisTemplate提供了最常用的String实现

public class StringRedisTemplate extends RedisTemplate<String, String>

注意:
不要使用泛型JAVA集合,如RedisTemplate<Object, Collection<?>>
因为,这样等于让JVM把Collection<?>序列化为字节数组,已value的方式保存在redis中。这种方式,存在大量的序列化反序列化操作,并且每次操作集合,都要先获得一个完成的集合(即集合的所有元素)。
建议,使用redis提供的集合类型,如List,Set,ZSet(Sorted set)和Map。

    private ListOperations<K, V> listOps;    private SetOperations<K, V> setOps;    private ZSetOperations<K, V> zSetOps;    private GeoOperations<K, V> geoOps;    private HyperLogLogOperations<K, V> hllOps;

opsForXXX 和 boundXXXOps 的区别
opsForXXX 获得一个operator,但是没有指定key,在一个连接(事务)内操作多个key和其对应的value。如:

public ValueOperations<K, V> opsForValue() {        if (valueOps == null) {            valueOps = new DefaultValueOperations<K, V>(this);        }        return valueOps;    }

boundXXXOps 获得一个指定了操作对象(key)的operator,在一个连接内只能操作这个key的value。如:

public BoundValueOperations<K, V> boundValueOps(K key) {        return new DefaultBoundValueOperations<K, V>(key, this);    }
原创粉丝点击