目录
1.Redis简介
Redis是一款基于内存的使用 K-V
结构存取数据的 NoSQL 非关系型数据库。
Redis的主要作用就是缓存数据,通常,会将关系型数据库(例如MySQL等)中的数据读取出来,写入到Redis中,后续,当需要获取数据时,将优先从Redis中读取,而不是从关系型数据库中读取。
由于Redis是基于内存的,读写效率远高于关系型数据库,进而可以提高查询效率,并且,可以起到“保护”关系型数据库的作用
redis常用命令可参考:redis常用命令汇总
2.添加依赖
pom.xml
中添加redis注解
<!--redis依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
3.项目配置
application.properties
中配置redis
# Redis服务器地址
spring.redis.host=10.1.30.222
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
#spring.redis.password=
## 连接超时时间(毫秒)
spring.redis.timeout=30000
# 连接池最大连接数(使用负值表示没有限制) 默认 8
spring.redis.lettuce.pool.max-active=8
# 连接池中的最大空闲连接 默认 8
spring.redis.lettuce.pool.max-idle=8
# 连接池中的最小空闲连接 默认 0
spring.redis.lettuce.pool.min-idle=1
#连接池中最大空闲等待时间,3s没有活干的时候直接驱逐该链接
spring.redis.lettuce.pool.min-evictable-idle-time-millis = 3000
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
spring.redis.lettuce.pool.max-wait=-1
4.使用Redis
StringTest
@SpringBootTest(classes = App.class)
class StringTest {
@Resource
private StringRedisTemplate stringRedisTemplate;
private final String key = "zhengzhou";
@Test
public void set() {
stringRedisTemplate.opsForValue().set(key, "我的家乡", 30, TimeUnit.SECONDS);
}
@Test
public void get(){
System.out.println(stringRedisTemplate.opsForValue().get(key));
}
}
SetTest
@SpringBootTest(classes = App.class)
public class SetTest {
@Resource
private StringRedisTemplate stringRedisTemplate;
private final String key = "city";
@Test
public void set() {
stringRedisTemplate.opsForSet().add(key,"北京","上海","广州","深圳");
}
@Test
public void get() {
System.out.println(stringRedisTemplate.opsForSet().members(key));
}
}
ListTest
@SpringBootTest(classes = App.class)
public class ListTest {
@Resource
private StringRedisTemplate stringRedisTemplate;
private final String key = "studentName";
@Test
public void leftPush() {
stringRedisTemplate.opsForList().leftPush(key, "张三");
stringRedisTemplate.opsForList().leftPush(key, "李四");
}
@Test
public void rightPush() {
stringRedisTemplate.opsForList().rightPush(key, "王五");
stringRedisTemplate.opsForList().rightPush(key, "赵六");
}
@Test
public void leftPop() {
System.out.println(stringRedisTemplate.opsForList().leftPop(key));
}
@Test
public void index() {
System.out.println(stringRedisTemplate.opsForList().index(key, 1));
}
@Test
public void range() {
System.out.println(stringRedisTemplate.opsForList().range(key, 0, 1));
}
@Test
void test6() {
// 如果一些原生命令,spring 没有给我们封装,使用redisTemplate.execute(new RedisCallback)自定义命令
while (true) {
System.out.println("开始一轮监听");
byte[] rawResults = stringRedisTemplate.execute(new RedisCallback<byte[]>() {
@Override
public byte[] doInRedis(RedisConnection connection){
List<byte[]> list = connection.bRPop(10, key.getBytes());
if (list != null && list.size() > 0) {
System.out.println(new String(list.get(0)));
}else {
System.out.println("没有数据");
}
return null;
}
});
return;
}
}
}
HashTest
@SpringBootTest(classes = App.class)
public class HashTest {
@Resource
private StringRedisTemplate stringRedisTemplate;
private final String key = "student.1";
@Test
public void set() {
stringRedisTemplate.opsForHash().put(key, "name", "张三");
stringRedisTemplate.opsForHash().put(key, "age", "18");
stringRedisTemplate.opsForHash().put(key, "city", "北京");
stringRedisTemplate.opsForHash().put(key, "sex", "男");
}
@Test
public void get() {
Map<Object, Object> entries = stringRedisTemplate.opsForHash().entries(key);
System.out.println(entries);
}
}
ZSetTest
@SpringBootTest(classes = App.class)
public class ZSetTest {
@Autowired
private StringRedisTemplate stringRedisTemplate;
private final String key ="张三";
@Test
public void test(){
//添加张三的成绩
stringRedisTemplate.opsForZSet().add(key,"语文",98);
stringRedisTemplate.opsForZSet().add(key,"数学",87);
stringRedisTemplate.opsForZSet().add(key,"英语",75);
}
}
5.测试结果
可使用免费版Navicat连接redis数据库,查看存储结果