Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅,并对spring 3.1 cache进行了实现。
spring-data-redis针对jedis提供了如下功能:
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-redisartifactId>
dependency>
spring:
redis:
port: 6379 # Redis服务器连接端口
host: 127.0.0.1 # Redis服务器地址
database: 0 # Redis数据库索引(默认为0)
password: # Redis服务器连接密码(默认为空)
timeout: 5000ms # 连接超时时间(毫秒)
jedis:
pool:
max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 8 # 连接池中的最大空闲连接
min-idle: 0 # 连接池中的最小空闲连接
server:
port: 8070
//删除单个key
public void delete(String key){
redisTemplate.delete(key);
}
//删除多个key
public void deleteKey (String ...keys){
redisTemplate.delete(keys);
}
//指定key的失效时间
public void expire(String key,long time){
redisTemplate.expire(key,time,TimeUnit.MINUTES);
}
//根据key获取过期时间
public long getExpire(String key){
Long expire = redisTemplate.getExpire(key);
return expire;
}
//判断key是否存在
public boolean hasKey(String key){
return redisTemplate.hasKey(key);
}
@Test
public void t1(){
//方式1:通过redisTemplate设置值
redisTemplate.boundValueOps("StringKey").set("StringValue");
//同时设置过期时间
redisTemplate.boundValueOps("StringKey").set("StringValue",1, TimeUnit.MINUTES);
//方式2:通过BoundValueOperations设置值
BoundValueOperations stringKey = redisTemplate.boundValueOps("StringKey");
stringKey.set("StringVaule");
//同时设置过期时间
stringKey.set("StringValue",1, TimeUnit.MINUTES);
//方式3:通过ValueOperations设置值
ValueOperations ops = redisTemplate.opsForValue();
ops.set("StringKey", "StringVaule");
//同时设置过期时间
ops.set("StringValue","StringVaule",1, TimeUnit.MINUTES);
log.info("保存成功");
}
@Test
public void t2(){
//方式1:通过redisTemplate设置值
String str1 = (String) redisTemplate.boundValueOps("StringKey").get();
log.info(str1);
//方式2:通过BoundValueOperations获取值
BoundValueOperations stringKey = redisTemplate.boundValueOps("StringKey");
String str2 = (String) stringKey.get();
//方式3:通过ValueOperations获取值
ValueOperations ops = redisTemplate.opsForValue();
String str3 = (String) ops.get("StringKey");
}
@Test
public void t3(){
//方式1
redisTemplate.boundValueOps("StringKey").expire(1,TimeUnit.MINUTES);
//方式2
redisTemplate.expire("StringKey",1,TimeUnit.MINUTES);
}
@Test
public void t1(){
//方式1:通过redisTemplate设置值
redisTemplate.boundHashOps("HashKey").put("SmallKey", "HashVaue");
//方式2:通过BoundValueOperations设置值
BoundHashOperations hashKey = redisTemplate.boundHashOps("HashKey");
hashKey.put("SmallKey", "HashVaue");
//方式3:通过ValueOperations设置值
HashOperations hashOps = redisTemplate.opsForHash();
hashOps.put("HashKey", "SmallKey", "HashVaue");
}
添加一整个Map集合
@Test
public void t9(){
Map<String, String> en = new HashMap<>();
en.put("hello1", "world1");
en.put("hello2", "world2");
en.put("hello3", "world3");
redisTemplate.boundHashOps("HashKey").putAll(en);
}
@Test
public void t3(){
redisTemplate.boundValueOps("HashKey").expire(1,TimeUnit.MINUTES);
redisTemplate.expire("HashKey",1, TimeUnit.MINUTES);
}
@Test
public void t2(){
//方式1:通过redisTemplate获取
String value1 = (String) redisTemplate.boundHashOps("HashKey").get("SmallKey");
//方式2:通过BoundValueOperations获取值
BoundHashOperations hashKey = redisTemplate.boundHashOps("HashKey");
String value2 = (String) hashKey.get("SmallKey");
//方式3:通过ValueOperations获取值
HashOperations hashOps = redisTemplate.opsForHash();
String value3 = (String) hashOps.get("HashKey", "SmallKey");
log.info(value1);
}
@Test
public void t4(){
//方式1、通过redisTemplate获取值
Set keys1 = redisTemplate.boundHashOps("HashKey").keys();
//方式2、通过BoundValueOperations获取值
BoundHashOperations hashKey = redisTemplate.boundHashOps("HashKey");
Set keys2 = hashKey.keys();
//方式3、通过ValueOperations获取值
HashOperations hashOps = redisTemplate.opsForHash();
Set keys3 = hashOps.keys("HashKey");
Iterator itr = keys1.iterator();
while (itr.hasNext()) {
log.info(itr.next()+"");
}
}
@Test
public void t5(){
//方式1、通过redisTemplate获取值
List values1 = redisTemplate.boundHashOps("HashKey").values();
//方式2、通过BoundValueOperations获取值
BoundHashOperations hashKey = redisTemplate.boundHashOps("HashKey");
List values2 = hashKey.values();
//方式3、通过ValueOperations获取值
HashOperations hashOps = redisTemplate.opsForHash();
List values3 = hashOps.values("HashKey");
for(Object v : values1){
log.info(v+"");
}
}
@Test
public void t6(){
//方式1、通过redisTemplate获取
Map<Object, Object> entries = redisTemplate.boundHashOps("HashKey").entries();
//方式2、通过BoundValueOperations获取值
BoundHashOperations hashKey = redisTemplate.boundHashOps("HashKey");
Map entries1 = hashKey.entries();
//方式3、通过ValueOperations获取值
HashOperations hashOps = redisTemplate.opsForHash();
Map entries2 = hashOps.entries("HashKey");
for (Map.Entry<Object, Object> en : entries.entrySet()) {
Object key = en.getKey();
Object value = en.getValue();
log.info("key="+key+",value="+value);
}
}
@Test
public void t7(){
//删除小key
redisTemplate.boundHashOps("HashKey").delete("SmallKey");
//删除大key
redisTemplate.delete("HashKey");
}
@Test
public void t8(){
boolean isEmpty = redisTemplate.boundHashOps("HashKey").hasKey("SmallKey");
log.info(isEmpty ? "包含" : "不包含");
}
@Test
public void t1(){
//方式1、通过redisTemplate设置值
redisTemplate.boundListOps("listKey").leftPush("listLeftValue1");
redisTemplate.boundListOps("listKey").rightPush("listRightValue2");
//方式2、通过BoundValueOperations设置值
BoundListOperations listKey = redisTemplate.boundListOps("listKey");
listKey.leftPush("listLeftValue3");
listKey.rightPush("listRightValue4");
//方式3、通过ValueOperations设置值
ListOperations opsList = redisTemplate.opsForList();
opsList.leftPush("listKey", "listLeftValue5");
opsList.rightPush("listKey", "listRightValue6");
}
将一整个List集合添加到缓存
@Test
public void t2(){
List<String> list = new ArrayList<String>();
redisTemplate.boundListOps("listKey").rightPushAll(list);
redisTemplate.boundListOps("listKey").leftPushAll(list);
}
@Test
public void t3(){
redisTemplate.boundValueOps("listKey").expire(1,TimeUnit.MINUTES);
redisTemplate.expire("listKey",1, TimeUnit.MINUTES);
}
@Test
public void t4(){
Long size = redisTemplate.boundListOps("listKey").size();
log.info("个数:"+size);
}
@Test
public void t5(){
//-1为打印全部
List listKey1 = redisTemplate.boundListOps("listKey").range(0, 10);
for (Object en : listKey1) {
log.info(en+"");
}
}
@Test
public void t6(){
String en = (String) redisTemplate.boundListOps("listKey").index(1);
log.info(en);
}
@Test
public void t7(){
String listKey2 = (String) redisTemplate.boundListOps("listKey").leftPop(); //从左侧弹出一个元素
String listKey3 = (String) redisTemplate.boundListOps("listKey").rightPop(); //从右侧弹出一个元素
}
@Test
public void t8(){
//key,索引,值
redisTemplate.boundListOps("listKey").set(3L,"hahaha");
}
@Test
public void t1(){
//方式1、通过redisTemplate设置值
redisTemplate.boundSetOps("setKey").add("setValue1", "setValue2", "setValue3");
//方式2、通过BoundValueOperations设置值
BoundSetOperations setKey = redisTemplate.boundSetOps("setKey");
setKey.add("setValue1", "setValue2", "setValue3");
//方式3、通过ValueOperations设置值
SetOperations setOps = redisTemplate.opsForSet();
setOps.add("setKey", "SetValue1", "setValue2", "setValue3");
}
@Test
public void t2(){
redisTemplate.boundValueOps("setKey").expire(1,TimeUnit.MINUTES);
redisTemplate.expire("setKey",1, TimeUnit.MINUTES);
}
@Test
public void t3(){
//方式1、通过redisTemplate获取值
Set set1 = redisTemplate.boundSetOps("setKey").members();
//方式2、通过BoundValueOperations获取值
BoundSetOperations setKey = redisTemplate.boundSetOps("setKey");
Set set2 = setKey.members();
//方式3、通过ValueOperations获取值
SetOperations setOps = redisTemplate.opsForSet();
Set set3 = setOps.members("setKey");
for (Object en : set1) {
log.info(en+"");
}
}
long size = redisTemplate.boundSetOps("setKey").size();
boolean isEmpty = redisTemplate.boundSetOps("setKey").isMember("setValue2");
@Test
public void t4(){
//删除指定元素,返回成功删除的个数
Long count = redisTemplate.boundSetOps("setKey").remove("setValue2", "setValue3", "setValue1");
//删除全部元素,执行成功返回true
Boolean isOk = redisTemplate.delete("setKey");
}
@Test
public void t1(){
//方式1、通过redisTemplate设置值
redisTemplate.boundZSetOps("zSetKey").add("zSetVaule", 100D);
//方式2、通过BoundValueOperations设置值
BoundZSetOperations zSetKey = redisTemplate.boundZSetOps("zSetKey");
zSetKey.add("zSetVaule", 100D);
//方式3、通过ValueOperations设置值
ZSetOperations zSetOps = redisTemplate.opsForZSet();
zSetOps.add("zSetKey", "zSetVaule", 100D);
}
向集合中插入多个元素,并设置分数
@Test
public void t2(){
DefaultTypedTuple<String> p1 = new DefaultTypedTuple<>("赵六", 2.1D);
DefaultTypedTuple<String> p2 = new DefaultTypedTuple<>("二哈", 3.3D);
Set<DefaultTypedTuple> ts = new HashSet<DefaultTypedTuple>();
ts.add(p1);
ts.add(p2);
redisTemplate.boundZSetOps("zSetKey").add(ts);
}
@Test
public void t3(){
Set<String> range = redisTemplate.boundZSetOps("zSetKey").range(0, -1);
for (String s : range) {
//获取指定元素的分数
double score = redisTemplate.boundZSetOps("zSetKey").score(s);
log.info(s+":"+score);
}
}
long count = redisTemplate.boundZSetOps("zSetKey").count(0D, 2.2D);
Set byScore = redisTemplate.boundZSetOps("zSetKey").rangeByScore(0D, 2.2D);
long size = redisTemplate.boundZSetOps("zSetKey").size();
@Test
public void t5(){
//用法和MySQL的limit一致
Set<String> range = redisTemplate.opsForZSet().rangeByScore("zSetKey", 0D, 100D, 0, 3);
for (String s : range) {
//获取指定元素的分数
double score = redisTemplate.boundZSetOps("zSetKey").score(s);
log.info(s+":"+score);
}
}
@Test
public void t6(){
Set<ZSetOperations.TypedTuple<String>> tuples = redisTemplate.boundZSetOps("zSetKey").rangeWithScores(0L, 3L);
for (ZSetOperations.TypedTuple<String> tuple : tuples) {
log.info(tuple.getValue() + " : " + tuple.getScore());
}
}
@Test
public void t7(){
//从小到大第n位
Long startRank = redisTemplate.boundZSetOps("zSetKey").rank("王五");
//从大到小第n位
Long endRank = redisTemplate.boundZSetOps("zSetKey").reverseRank("王五");
}
//删除指定元素
redisTemplate.boundZSetOps("zSetKey").remove("zSetVaule");
//删除指定索引范围的元素(Long类型)
redisTemplate.boundZSetOps("zSetKey").removeRange(0L,3L);
//删除指定分数范围内的元素(Double类型)
redisTemplate.boundZSetOps("zSetKey").removeRangeByScorssse(0D,2.2D);
@Test
public void t8(){
//在原有分数上做加法
Double score = redisTemplate.boundZSetOps("zSetKey").incrementScore("王五",1.1D);
log.info(score+"");
}