Spring Data Redis —— 快速入门

时间:2021-04-24 22:21:49
Spring Data Redis  ——  快速入门

  环境要求:Redis 2.6及以上,javase 8.0及以上;

一、Spring Data Redis 介绍

  Spring-data-redis是spring的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅,并对spring 3.1 cache进行了实现。
spring-data-redis针对jedis提供了如下功能:


1.连接池自动管理,提供了一个高度封装的“RedisTemplate”类.

2.针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口

  • 
ValueOperations:简单键值对操作 String

  • SetOperations:set类型数据操作 set

  • ZSetOperations:zset类型数据操作 sortedset---->zset

  • HashOperations:针对hash类型的数据操作 hash

  • ListOperations:针对list类型的数据操作 list

二、入门案例

1、环境构建

  使用springboot构建项目选择redis依赖

Spring Data Redis  ——  快速入门

2、配置redis

将application.properties修改为application.yml的格式

 spring:
redis:
database: 0
host: localhost
port: 6379
password:
jedis:
pool:
max-active: 8
max-idle: 8
min-idle: 0

3、在test中SpringDataRedisDemoApplicationTests.java中测试相关api

 package com.cenobitor.spring_data_redis_demo;

 import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
import java.util.Set; @RunWith(SpringRunner.class)
@SpringBootTest
public class SpringDataRedisDemoApplicationTests { @Autowired
private RedisTemplate redisTemplate; @Test
public void contextLoads() {
} /**
* 值得操作
*/
@Test
public void setValue(){
redisTemplate.boundValueOps("name").set("redis");
} @Test
public void getValue(){
String str = (String) redisTemplate.boundValueOps("name").get();
System.out.println(str);
Assert.assertNotNull(str);
} /**
* set类型的操作
*/
@Test
public void setSetValue(){
redisTemplate.boundSetOps("nameset").add("曹操");
redisTemplate.boundSetOps("nameset").add("孙权");
redisTemplate.boundSetOps("nameset").add("刘备");
}
@Test
public void getSetValue(){
Set nameset = redisTemplate.boundSetOps("nameset").members();
System.out.println(nameset);//[刘备, 孙权, 曹操]
}
//删除集合中的某个元素
@Test
public void deleteSetValue(){
Long remove = redisTemplate.boundSetOps("nameset").remove("刘备");
System.out.println(remove);
Assert.assertEquals("1",remove);
}
//删除整个集合
@Test
public void deleteSet(){
Boolean nameset = redisTemplate.delete("nameset");
Assert.assertEquals(true,nameset);
} /**
* List类型操作
*/
//右压栈:后添加的对象排在后边
@Test
public void setListValue1(){
redisTemplate.boundListOps("namelist1").rightPush("刘备");
redisTemplate.boundListOps("namelist1").rightPush("关羽");
redisTemplate.boundListOps("namelist1").rightPush("张飞");
}
@Test
public void getListValue1(){
List list = redisTemplate.boundListOps("namelist1").range(0, -1);
System.out.println(list);//[刘备, 关羽, 张飞]
}
//左压栈:后添加的对象排在前边
@Test
public void setListValue2(){
redisTemplate.boundListOps("namelist2").leftPush("刘备");
redisTemplate.boundListOps("namelist2").leftPush("关羽");
redisTemplate.boundListOps("namelist2").leftPush("张飞");
}
@Test
public void getListValue2(){
List list = redisTemplate.boundListOps("namelist2").range(0, -1);
System.out.println(list);//[张飞, 关羽, 刘备]
}
//查询集合某个元素
@Test
public void searchListByIndex(){
String s = (String) redisTemplate.boundListOps("namelist1").index(1);
System.out.println(s);//关羽
}
//移除集合某个元素
@Test
public void removeListByIndex(){
redisTemplate.boundListOps("namelist1").remove(1, "关羽");
} /**
* Hash类型操作
*/
@Test
public void setHashValue(){
redisTemplate.boundHashOps("namehash").put("a", "唐僧");
redisTemplate.boundHashOps("namehash").put("b", "悟空");
redisTemplate.boundHashOps("namehash").put("c", "八戒");
redisTemplate.boundHashOps("namehash").put("d", "沙僧");
}
@Test
public void getHash(){
//提取所有的KEY
Set s = redisTemplate.boundHashOps("namehash").keys();
System.out.println(s);//[a, b, c, d]
//提取所有的值
List values = redisTemplate.boundHashOps("namehash").values();
System.out.println(values);//[唐僧, 悟空, 八戒, 沙僧]
//根据KEY提取值
String str = (String) redisTemplate.boundHashOps("namehash").get("b");
System.out.println(str);//悟空
}
//根据KEY移除值
@Test
public void removeHashByKey() {
redisTemplate.boundHashOps("namehash").delete("c");
}
}