在高并发系统开发领域,Redis凭借其卓越性能已成为关键组件。本文将系统讲解Redis基础概念、Linux环境安装指南及常用命令实战,帮助开发者快速掌握核心技能。
| SQL | NoSQL | |
|---|---|---|
| 数据结构 | 结构化 | 非结构化 |
| 数据关联 | 关联的 | 无关联的 |
| 查询方法 | SQL查询 | 非SQL |
| 事务特性 | ACID | BASE |
| 存储方式 | 磁盘 | 内存 |
| 扩展性 | 垂直 | 水平 |
| 使用场景 | 数据结构固定、相关业务对数据安全性一致性要求高 | 数据结构不固定、对数据安全性一致性要求不高、对性能要求高 |
NoSQL的数据结构:
远程词典服务器,基于内存的键值型NoSQL数据库
特征:
官网:Redis - The Real-time Data Platform
打开虚拟机终端环境(示例使用VMware+Finalshell组合)
切换root权限:执行su -命令后输入密码
安装必要依赖:
yum install -y gcc tcl
上传并解压安装包
将Redis安装包放置于/usr/local/src目录
进入目标目录:
cd /usr/local/src/
执行解压命令:
tar -zxvf redis-6.2.6.tar.gz
进入解压目录:
cd redis-6.2.6
运行编译安装:
make && make install

出现成功提示即表示安装完成
默认安装路径为/usr/local/bin

reids-cli:redis命令行客户端工具
redis-server:服务端启动脚本
redis-sentinel:哨兵启动脚本
哨兵机制主要功能:
Redis支持三种启动方式:
一.默认启动
安装完成后直接执行:
redis-server
即可启动服务

此方式为前台启动,会阻塞当前会话窗口,关闭窗口或按Ctrl + C将停止服务
二.指定配置启动
要实现后台运行,需修改Redis配置文件/usr/local/src/redis-6,2,6/redis.conf
进入目录备份配置:
cd /usr/local/src/redis-6.2.6/
执行备份:
cp redis.conf redis.conf.bck
编辑配置文件:
vi redis.conf
核心配置项

其他配置

快速定位技巧:
输入
/关键词回车进行搜索n键跳转下一个匹配项,N键返回上一个
修改配置步骤:
i进入编辑模式(显示-- INSERT --提示)Esc退出编辑1.修改bind配置

2.修改daemonize配置

3.添加密码配置

4.配置日志路径

保存配置
输入保存命令:
:wq
指定配置启动命令:
redis-server redis.conf
注意:在redis安装目录下可省略配置文件路径

验证服务状态:
ps -ef|grep redis
终止进程命令:
kill -9 进程PID
或使用专用命令:
redis-cli -a 密码 shutdown
三.开机自启
创建系统服务文件:
vi /etc/systemd/system/redis.service
写入以下内容:
[Unit] Description=redis-server After=network.target [Service] Type=forking ExecStart=/usr/local/bin/redis-server /usr/local/src/redis-6.2.6/redis.conf PrivateTmp=true [Install] WantedBy=multi-user.target
重载系统服务配置:
systemctl daemon-reload
服务管理命令:
# 启动 systemctl start redis # 停止 systemctl stop redis # 重启 systemctl restart redis # 查看状态 systemctl status redis
设置开机自启:
systemctl enable redis
Redis操作需通过客户端工具实现,主要分为三类:
命令行客户端使用方式:
redis-cli [options] [commonds]
常用参数说明:
-h 127.0.0.1:指定连接IP地址,默认本地
-p 6379:指定连接端口,默认6379
-a 123456:指定认证密码
也可连接后输入密码:
AUTH 密码
常用命令示例:
ping:检测服务状态,正常返回PONG不指定命令将进入交互模式
图形客户端配置
以Another Redis为例:
1.开放防火墙端口
检查防火墙状态:
systemctl status firewalld
开放6379端口:
firewall-cmd --permanent --add-port=6379/tcp firewall-cmd --reload
参数说明:
--permanent:永久生效--reload:重载配置
2.配置连接参数
Host: 虚拟机IP
Port: 6379
Password: 配置文件中设置的密码
Redis采用key-value存储模型,其中value支持多种数据结构:

KEYS:模糊查询keyDEL:删除指定keyEXISTS:检查key是否存在EXPIRE:设置key有效期TTL:查看key剩余有效期使用help [command]可查看命令详情

字符串类型分为三类:
底层均采用字节数组存储,编码方式不同。最大容量限制为512MB
常用命令:
Redis支持多级key命名,使用:分隔,例如:
项目名:业务名:类型:id
Hash结构支持字段级操作,适合存储对象

常用命令:
双向链表结构,支持正向和反向检索
特性:
常用命令:
注意:Redis中
nil表示空值
无序集合,类似Java的HashSet
特性:
常用命令:
带排序功能的集合,每个元素关联score用于排序,底层采用跳表+哈希表实现
特性:
(常用于实现排行榜功能)
常用命令:
官方提供多语言客户端支持:https://redis.io/clients/

官方Java客户端地址:redis/jedis: Redis Java client
开发步骤:
添加依赖
redis.clients
jedis
7.1.0
建立连接
private Jedis jedis;
@BeforeEach
void setUp(){
//1.建立连接
jedis = new Jedis("192.168.227.128",6379);
//2.设置密码
jedis.auth("123456");
//3.选择库
jedis.select(0);
}测试操作
@Test
public void testJedis(){
//存入数据
String result = jedis.set("name", "张三");
System.out.println("result = " + result);
//获取数据
String name = jedis.get("name");
System.out.println("name = " + name);
}释放资源
@AfterEach
void tearDown(){
if(jedis != null){
jedis.close();
}
}
注意:判空操作避免空指针异常
Jedis线程不安全且频繁创建销毁影响性能,推荐使用连接池
线程不安全原因:
每个Jedis实例对应独立TCP连接,多线程共享会导致并发问题
连接池配置示例:
public class JedisConnectionFactory {
private static JedisPool jedisPool;
static{
//配置连接池
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(8);//最大连接数
poolConfig.setMaxIdle(8);//最大空闲连接
poolConfig.setMinIdle(0);//最小空闲连接
poolConfig.setMaxWaitMillis(10000);//最大等待时间
//创建连接池对象
jedisPool = new JedisPool(poolConfig,"192.168.227.128",6379,1000,"123456");
}
public static Jedis getJedis(){
return jedisPool.getResource();
}
}
public class JedisTest {
private Jedis jedis;
@BeforeEach
void setUp(){
//1.建立连接
jedis = JedisConnectionFactory.getJedis();
//2.选择库
jedis.select(0);
}
@Test
public void testJedis(){
//存入数据
String result = jedis.set("name", "张三");
System.out.println("result = " + result);
//获取数据
String name = jedis.get("name");
System.out.println("name = " + name);
}
@AfterEach
void tearDown(){
if(jedis != null){
jedis.close();//归还连接
}
}
}
Spring对Redis的集成模块,官网:https://spring.io/projects/spring-data-redis
主要特性:

开发步骤:
添加SpringBoot依赖
配置application.yml
spring:
data:
redis:
host: 192.168.227.128
port: 6379
password: 123456
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
max-wait: 100ms
注意新版配置层级
注入RedisTemplate
@Autowired
private RedisTemplate redisTemplate;编写测试用例
@SpringBootTest
class RedisDemoApplicationTests {
@Autowired
private RedisTemplate redisTemplate;
@Test
void testString() {
//写入一条String数据
redisTemplate.opsForValue().set("name", "zs");
//获取String数据
System.out.println(redisTemplate.opsForValue().get("name"));
}
}RedisTemplate默认使用JDK序列化,会产生可读性差的问题
序列化过程:
Java对象 → 序列化 → byte[] → 发送给Redis

默认采用JDK序列化原因:
考虑通用性,支持直接存储Java对象
自定义序列化配置:
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
//创建RedisTemplate对象
RedisTemplate template = new RedisTemplate<>();
//设置连接工厂
template.setConnectionFactory(redisConnectionFactory);
//创建json序列化工具
GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
//设置key的序列化
template.setKeySerializer(RedisSerializer.string());
template.setHashKeySerializer(RedisSerializer.string());
//设置value的序列化
template.setValueSerializer(jsonRedisSerializer);
template.setHashValueSerializer(jsonRedisSerializer);
//返回
return template;
}
}

Spring提供的专用模板类,默认采用String序列化,需手动处理对象序列化
使用示例:
@SpringBootTest
class RedisDemoApplicationTests {
@Autowired
private StringRedisTemplate stringRedisTemplate;
private static final ObjectMapper mapper = new ObjectMapper();
@Test
void testString() {
//写入一条String数据
stringRedisTemplate.opsForValue().set("name", "zs");
//获取String数据
System.out.println(stringRedisTemplate.opsForValue().get("name"));
}
@Test
public void testSaveUser() {
//创建对象
User user = new User("张三", 20);
//手动序列化
String json = mapper.writeValueAsString(user);
//写入数据
stringRedisTemplate.opsForValue().set("user:100",json);
//获取数据
String jsonUser = stringRedisTemplate.opsForValue().get("user:100");
//手动反序列化
User user1 = mapper.readValue(jsonUser, User.class);
System.out.println("user1 = " + user1);
}
}
ObjectMapper是Jackson库提供的对象-JSON转换工具

@Test
public void testHash(){
stringRedisTemplate.opsForHash().put("user:400","name","李四");
stringRedisTemplate.opsForHash().put("user:400","age","20");
Map entries = stringRedisTemplate.opsForHash().entries("user:400");
System.out.println("entries = " + entries);
}
本文系统讲解了Redis核心概念、安装配置及常用操作,通过实际案例演示了Java客户端的集成方法,为开发者构建高性能应用提供了实用指导。