一聚教程网:一个值得你收藏的教程网站

热门教程

Redis入门指南:Redis安装启动步骤详解与命令及Java客户端解析

时间:2026-05-29 18:00:01 编辑:袖梨 来源:一聚教程网

在高并发系统开发领域,Redis凭借其卓越性能已成为关键组件。本文将系统讲解Redis基础概念、Linux环境安装指南及常用命令实战,帮助开发者快速掌握核心技能。

1.初识Redis

1.1NoSQL

SQLNoSQL
数据结构结构化非结构化
数据关联关联的无关联的
查询方法SQL查询非SQL
事务特性ACIDBASE
存储方式磁盘内存
扩展性垂直水平
使用场景数据结构固定、相关业务对数据安全性一致性要求高数据结构不固定、对数据安全性一致性要求不高、对性能要求高

NoSQL的数据结构:

  1. 键值结构(Redis)
  2. 文档类型(MongoDB)
  3. 列类型(HBase)
  4. Graph类型(Neo4j)

1.2Redis

远程词典服务器,基于内存的键值型NoSQL数据库

特征

  1. 键值型,value支持多种不同数据结构,功能丰富
  2. 单线程,每个命令具备原子性
  3. 低延迟,速度快(基于内存、IO多路复用、良好的编码)
  4. 支持数据持久化
  5. 支持主从集群、分片集群
  6. 支持多语言客户端

1)安装Redis

官网:Redis - The Real-time Data Platform

  1. 打开虚拟机终端环境(示例使用VMware+Finalshell组合)

  2. 切换root权限:执行su -命令后输入密码

  3. 安装必要依赖:

    yum install -y gcc tcl
  4. 上传并解压安装包

    1. 将Redis安装包放置于/usr/local/src目录

    2. 进入目标目录:

      cd /usr/local/src/
    3. 执行解压命令:

      tar -zxvf redis-6.2.6.tar.gz 
    4. 进入解压目录:

      cd redis-6.2.6
    5. 运行编译安装:

      make && make install

      Redis初识、Redis的安装与启动、Redis命令及Java客户端详解

      出现成功提示即表示安装完成

    6. 默认安装路径为/usr/local/bin

      Redis初识、Redis的安装与启动、Redis命令及Java客户端详解

      1. reids-cli:redis命令行客户端工具

      2. redis-server:服务端启动脚本

      3. redis-sentinel:哨兵启动脚本

        哨兵机制主要功能:

        1. 监控主节点状态
        2. 自动执行故障转移
        3. 选举新主节点

2)启动Redis

Redis支持三种启动方式:

  1. 默认启动
  2. 指定配置启动
  3. 开机自启

一.默认启动

安装完成后直接执行:

redis-server

即可启动服务

Redis初识、Redis的安装与启动、Redis命令及Java客户端详解

此方式为前台启动,会阻塞当前会话窗口,关闭窗口或按Ctrl + C将停止服务

二.指定配置启动

要实现后台运行,需修改Redis配置文件/usr/local/src/redis-6,2,6/redis.conf

  1. 进入目录备份配置:

     cd /usr/local/src/redis-6.2.6/

    执行备份:

    cp redis.conf redis.conf.bck
  2. 编辑配置文件:

    vi redis.conf

核心配置项

Redis初识、Redis的安装与启动、Redis命令及Java客户端详解

其他配置

Redis初识、Redis的安装与启动、Redis命令及Java客户端详解

快速定位技巧:

输入/关键词回车进行搜索

n键跳转下一个匹配项,N键返回上一个

修改配置步骤:

  1. i进入编辑模式(显示-- INSERT --提示)
  2. 修改完成后按Esc退出编辑

1.修改bind配置

Redis初识、Redis的安装与启动、Redis命令及Java客户端详解

2.修改daemonize配置

Redis初识、Redis的安装与启动、Redis命令及Java客户端详解

3.添加密码配置

Redis初识、Redis的安装与启动、Redis命令及Java客户端详解

4.配置日志路径

Redis初识、Redis的安装与启动、Redis命令及Java客户端详解

保存配置

输入保存命令:

:wq

指定配置启动命令:

redis-server redis.conf

注意:在redis安装目录下可省略配置文件路径

Redis初识、Redis的安装与启动、Redis命令及Java客户端详解

验证服务状态:

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

3)Redis客户端

Redis操作需通过客户端工具实现,主要分为三类:

  1. 命令行客户端
  2. 图形化客户端
  3. 编程客户端

命令行客户端使用方式:

redis-cli [options] [commonds]

常用参数说明:

  1. -h 127.0.0.1:指定连接IP地址,默认本地

  2. -p 6379:指定连接端口,默认6379

  3. -a 123456:指定认证密码

    也可连接后输入密码:

    AUTH 密码

常用命令示例:

  1. ping:检测服务状态,正常返回PONG

不指定命令将进入交互模式

图形客户端配置

以Another Redis为例:

1.开放防火墙端口

检查防火墙状态:

systemctl status firewalld

开放6379端口:

firewall-cmd --permanent --add-port=6379/tcp
firewall-cmd --reload

参数说明:

  1. --permanent:永久生效
  2. --reload:重载配置

2.配置连接参数

Host: 虚拟机IP

Port: 6379

Password: 配置文件中设置的密码

2.Redis命令

2.1数据结构介绍

Redis采用key-value存储模型,其中value支持多种数据结构:

Redis初识、Redis的安装与启动、Redis命令及Java客户端详解

2.2通用命令

  1. KEYS:模糊查询key
  2. DEL:删除指定key
  3. EXISTS:检查key是否存在
  4. EXPIRE:设置key有效期
  5. TTL:查看key剩余有效期

使用help [command]可查看命令详情

Redis初识、Redis的安装与启动、Redis命令及Java客户端详解

2.3String类型

字符串类型分为三类:

  1. 普通字符串
  2. 整型(支持自增操作)
  3. 浮点型(支持自增操作)

底层均采用字节数组存储,编码方式不同。最大容量限制为512MB

常用命令

  1. SET:设置键值对
  2. GET:获取键值
  3. MSET:批量设置
  4. MGET:批量获取
  5. INCR:整型自增
  6. INCRBY:指定步长自增
  7. INCRBYFLOAT:浮点型自增
  8. SETNX:不存在时设置
  9. SETEX:设置带有效期键值

2.4key的层级格式

Redis支持多级key命名,使用:分隔,例如:

项目名:业务名:类型:id

2.5Hash

Hash结构支持字段级操作,适合存储对象

Redis初识、Redis的安装与启动、Redis命令及Java客户端详解

常用命令

  1. HSET:设置字段值
  2. HGET:获取字段值
  3. HMSET:批量设置字段
  4. HMGET:批量获取字段
  5. HGETALL:获取所有字段
  6. HKEYS:获取所有字段名
  7. HVALS:获取所有字段值
  8. HINCRBY:字段自增
  9. HSETNX:不存在时设置字段

2.6List类型

双向链表结构,支持正向和反向检索

特性

  1. 元素有序
  2. 允许重复
  3. 高效插入删除
  4. 查询效率一般

常用命令

  1. LPUSH:左侧插入元素
  2. LPOP:左侧弹出元素
  3. RPUSH:右侧插入元素
  4. RPOP:右侧弹出元素
  5. LRANGE:范围查询
  6. BLPOP/BRPOP:阻塞式弹出

注意:Redis中nil表示空值

2.7Set类型

无序集合,类似Java的HashSet

特性

  1. 元素无序
  2. 不允许重复
  3. 高效查找
  4. 支持集合运算

常用命令

  1. SADD:添加元素
  2. SREM:移除元素
  3. SCARD:获取元素数量
  4. SISMEMBER:判断元素存在
  5. SMEMBERS:获取所有元素
  6. SINTER:求交集
  7. SDIFF:求差集
  8. SUNION:求并集

2.8SortedSet类型

带排序功能的集合,每个元素关联score用于排序,底层采用跳表+哈希表实现

特性

  1. 元素按score排序
  2. 元素唯一
  3. 高效查询

(常用于实现排行榜功能)

常用命令

  1. ZADD:添加元素
  2. ZREM:删除元素
  3. ZSCORE:获取元素score
  4. ZRANK:获取元素排名
  5. ZCARD:获取元素数量
  6. ZCOUNT:统计score范围元素
  7. ZINCRBY:增加元素score
  8. ZRANGE:按排名查询
  9. ZRANGEBYSCORE:按score查询
  10. ZDIFF/ZINTER/ZUNION:集合运算

3.Redis的Java客户端

官方提供多语言客户端支持:https://redis.io/clients/

Redis初识、Redis的安装与启动、Redis命令及Java客户端详解

3.1Jedis快速入门

官方Java客户端地址:redis/jedis: Redis Java client

开发步骤

  1. 添加依赖

    
        redis.clients
        jedis
        7.1.0
    
  2. 建立连接

    private Jedis jedis;
    
        @BeforeEach
        void setUp(){
            //1.建立连接
            jedis = new Jedis("192.168.227.128",6379);
            //2.设置密码
            jedis.auth("123456");
            //3.选择库
            jedis.select(0);
        }
  3. 测试操作

    @Test
        public void testJedis(){
            //存入数据
            String result = jedis.set("name", "张三");
            System.out.println("result = " + result);
            //获取数据
            String name = jedis.get("name");
            System.out.println("name = " + name);
        }
  4. 释放资源

    @AfterEach
        void tearDown(){
            if(jedis != null){
                jedis.close();
            }
        }

    注意:判空操作避免空指针异常

3.2Jedis连接池

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();//归还连接
        }
    }
}

3.3SpringDateRedis

Spring对Redis的集成模块,官网:https://spring.io/projects/spring-data-redis

主要特性:

  1. 支持多种客户端(Lettuce/Jedis)
  2. 提供统一API(RedisTemplate)
  3. 支持发布订阅模式
  4. 支持集群和哨兵
  5. 支持响应式编程
  6. 多种序列化方案
  7. 实现JDK集合接口

Redis初识、Redis的安装与启动、Redis命令及Java客户端详解

3.4RedisTemplate入门

开发步骤

  1. 添加SpringBoot依赖

  2. 配置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

    注意新版配置层级

  3. 注入RedisTemplate

    @Autowired
        private RedisTemplate redisTemplate;
  4. 编写测试用例

    @SpringBootTest
    class RedisDemoApplicationTests {
        @Autowired
        private RedisTemplate redisTemplate;
    
        @Test
        void testString() {
            //写入一条String数据
            redisTemplate.opsForValue().set("name", "zs");
            //获取String数据
            System.out.println(redisTemplate.opsForValue().get("name"));
        }
    }

3.5RedisSerializer

RedisTemplate默认使用JDK序列化,会产生可读性差的问题

序列化过程:

Java对象 → 序列化 → byte[] → 发送给Redis

Redis初识、Redis的安装与启动、Redis命令及Java客户端详解

默认采用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;
    }
}

3.6StringRedisTemplate

Redis初识、Redis的安装与启动、Redis命令及Java客户端详解

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转换工具

Redis初识、Redis的安装与启动、Redis命令及Java客户端详解

3.7RedisTemplate操作Hash类型

@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客户端的集成方法,为开发者构建高性能应用提供了实用指导。

热门栏目