Redis 的安装与使用;SpringBoot 整合 Redis 代码示例
- 此篇博客中是以 Redis 做数据库用,Redis 做缓存用请参照SpringBoot 整合缓存 Redis 代码详解这篇博客;
- 以Windows环境为例:
- 下载 redis:
https://github.com/tporadowski/redis/releases;
可以下载安装版本和免安装版本。
- 这里以免安装版本为例:打开 redis 的根目录:
- 编辑配置文件:redis.windows.conf:
- 设置连接 redis 服务器的密码为:hd123:
- 启动 redis 服务端:
- 使用 redis 客户端连接服务端:
- 通过 cmd 界面使用 redis:
- set 方法是用来操作字符串的方法,hset 是操作 redis 哈希(Hash) 的方法,redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
- 编程方式使用 redis:
- 添加 redis 相关依赖:
<!--redis的依赖spring-boot-starter-data-redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--以下不是redis相关了-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
- 配置 yml:
spring:
redis:
host: 127.0.0.1
port: 6379
password: hd123
- 测试代码如下,依次执行setStringRedisTemplate、getStringRedisTemplate、setRedisTemplate、getRedisTemplate:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
@SpringBootTest
public class SpringBootRedisTest {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired
private RedisTemplate redisTemplate;
@Test
void setStringRedisTemplate() {
ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();
ops.set("code_name", "code_redis");
}
@Test
void getStringRedisTemplate() {
ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();
System.out.println(ops.get("name"));
// 输出为:redis
System.out.println(ops.get("code_name"));
// 输出为:code_redis
}
@Test
void setRedisTemplate() {
HashOperations ops = redisTemplate.opsForHash();
ops.put("code_info", "code_name", "code_info_redis");
}
@Test
void getRedisTemplate() {
HashOperations ops = redisTemplate.opsForHash();
System.out.println(ops.get("info", "name"));
// 输出为:null
System.out.println(ops.get("code_info", "code_name"));
// 输出为:code_info_redis
}
}
- cmd 界面 set() 方法和 opsForValue().set() 方法操作的是同一个字符串;但 cmd 界面的 hset() 和 opsForHash().set() 方法操作的不是同一个 Hash,所以 System.out.println(ops.get(“info”, “name”)); 输出为 null,同理通过 cmd 命令查询 hget code_info code_name 返回的结果也为 nil 。
- 修改 redis 默认客户端:默认使用 lettuce。
- jedis 和 lettuce 对比:
1、jedis 连接 redis 服务器是直连模式,当多线程模式下使用 jedis 会存在线程安全问题,解决方案可以通过配置连接池使每个连接专用,但这样整体性能大受影响。
2、lettuce 基于 Netty 框架进行与 redis 服务器连接,底层设计中采用 StatefulRedisConnection,StatefulRedisConnection 自身是线程安全的,可以保障并发访问线程安全问题,所以一个连接可被多个线程复用。当然 lettuce 也支持多连接实例一起工作。