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

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);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值