spring-data-redis相关操作

由于文章出处还得花积分币来下载,所以转出来,希望有用到的朋友


首先的首先澄清一个对初学者非常容易混淆的概念! 

不要试图使用泛型Java集合,例如RedisTemplate<Key,Collection<?>>,这种用法等价于在jvm把Collection<?>序列化成字节数组,以value的形式保存到redis中,很显然,这种方法非常低效,不仅存在大量的序列化反序列化操作,并且每次操作集合都要首先获取一个完整的集合(包含所有的元素)。正确的方法是使用redis提供的集合类型,例如List,Set,ZSet(Sorted Set)和Map,详细请看以下章节。 

如果你在RedisTemplate的泛型中用到了Java集合类型,那明显你做错了!如果你还是不明白错在哪里,请立刻停下手上的工作,找其他同事深入了解原因。


1.Operations相关

opsForXXX和boundXXXOps的区别? XXX为value的类型,前者获取一个operator,但是没有指定操作的对象(key),可以在一个连接(事务)内操作多个key以及对应的value;后者获取了一个指定操作对象(key)的operator,在一个连接(事务)内只能操作这个key对应的value。 

关于计数的API(increment)有一个bug,需要各位使用中注意,通过increment计数以后,通过get方式获取计数值的时候可能会抛出EOF异常(和本地的jdk以及redis的编译版本有关),可以考虑使用boundValueOps(key).get(0,-1)获取计数值。


2.ValueOperations和BoundValueOperations 相关


ValueOperations valueOperations = redisTemplate.opsForValue; 

BoundValueOperations boundValueOperations = redisTemplate.boundValueOps(key); 

类:ValueOperations 等价理解成:Map<Object,Object> 

方法:set(key,value)  保存 

解释:

key:为保存时的主键 

value:为你要保存的Object。

等价理解成: 

Map<Object,Object> map = new HashMap<Object,Object>();               

map.put(key,value)。 

代码:redisTemplate.opsForValue().set(AD_KEY_PREFIX + ad.getId(), ad)。 

用处:Mercury项目中,所有可用的广告实体都通过此方法存放在redis中。  

方法:get(key) 获取 

解释:

key:为保存时候的主键,返回一个Object对象。

等价理解成: Map<Object,Object> map = set(key,value)保存时候的map; 

 Object object = map.get(key); 

代码:edisTemplate.opsForValue().get(AD_KEY_PREFIX + ad.getId()); 

用处:Mercury项目中,根据广告的id获取某一款广告  

类:BoundValueOperations 理解:对保存的值做一些细微的操作,例如对某一个值的操作等。


3.ListOperations和BoundListOperations相关


ListOperations listOperations = redisTemplate.opsForList(); 

BoundListOperations boundListOperations = redisTemplate.boundListOps(key); 

类:ListOperations 等价理解成:List<Object> 

类:BoundListOperations 等价理解成:对保存的值做一些细微的操作。


4.SetOperations和BoundSetOperations 相关


SetOperations setOperations = redisTemplate.opsForSet(); 

BoundSetOperations boundSetOperations = redisTemplate.boundSetOps(key); 

 

类:SetOperations 等价理解成:Set<Object> 

方法:add(key,value)  添加 

解释:

key:保存Set的主键  

value:向Set中添加一个值。

等价理解成:  

Map<Object,Set<Object>> map = new HashMap<Object,Set<Object>>();                

Set<Object> set = new HashSet<Object>(); 

map.put(key,set); 

Set<Object> set = map.get(key);                

set.add(value); 

代码:

redisTemplateSet.opsForSet().add(ALL_AVAILABLE_ADIDS_NORMAL, AD_KEY_PREFIX + ad.getId()); 

用处:Mercury项目往广告清单中添加广告。  

方法:members(key)  获取 

解释:key:保存Set的主键  

等价理解成:  

Map<Object,Set<Object>> map = add(key,value)方法添加时候的map;               

Set<Object> set = map.get(key); 

代码:redisTemplateSet.opsForSet().members(ALL_AVAILABLE_ADIDS_NORMAL); 

用处:Mercury项目获取某一个广告清单  

方法:intersect(key,otherKey)  取两个Set的交集 

解释:

key:保存Set的主键  

otherKey:保存另一个Set的主键 

下图阴影的部分为该方法的返回值: 


方法:difference(key, otherKey)  取两个Set的补集 

解释:

key:保存Set的主键  

otherKey:保存另一个Set的主键 

下图阴影的部分为该方法的返回值:


方法:difference(key, otherKey)  取两个Set的补集 

解释:

key:保存Set的主键  

otherKey:保存另一个Set的主键 

下图阴影的部分为该方法的返回值:



5.ZSetOperations和BoundZSetOperations相关


ZSetOperations zsetOperations = redisTemplate.opsForZSet(); 

BoundZSetOperations boundZSetOperations = redisTemplate.boundZSetOps(key);  

类:ZSetOperations 等价理解成:可排序的Set<Object> 

方法:add(key, value, score);  添加 

解释:key:保存Set的主键  value:向Set中添加一个值  score:这个值在这个Set中的权重,以后这个Set可以根据权重进行排序,分为以下几种情况: 

根据权重从小到大的排序 

根据权重从小到大的排序 

 选出权重在某一个范围内的实体排序等等


6.HashOperations和BoundHashOperations 


HashOperations hashOperations = redisTemplate.opsForHash(); BoundHashOperations boundHashOperations = redisTemplate.boundHashOps(key);


7.其他


删除redis中某一个key redisTemplate.delete(key);




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值