tulip notes
首页
  • 学习笔记

    • 《Vue》
  • 踩坑日记

    • JavaScript
  • MQ
  • Nginx
  • IdentityServer
  • Redis
  • Linux
  • Java
  • SpringBoot
  • SpringCloud
  • MySql
  • docker
  • 算法与设计模式
  • 踩坑与提升
  • Git
  • GitHub技巧
  • Mac
  • 网络
  • 项目构建合集
  • 一些技巧
  • 面试
  • 一些杂货
  • 友情链接
  • 项目发布
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Star-Lord

希望一天成为大师的学徒
首页
  • 学习笔记

    • 《Vue》
  • 踩坑日记

    • JavaScript
  • MQ
  • Nginx
  • IdentityServer
  • Redis
  • Linux
  • Java
  • SpringBoot
  • SpringCloud
  • MySql
  • docker
  • 算法与设计模式
  • 踩坑与提升
  • Git
  • GitHub技巧
  • Mac
  • 网络
  • 项目构建合集
  • 一些技巧
  • 面试
  • 一些杂货
  • 友情链接
  • 项目发布
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 各种MQ

  • Nginx

  • IdentityServer

  • Redis

    • 初始Redis与安装
      • Redis简介
        • 支持的数据类型
      • 安装
        • 下载安装包
        • 编译与安装
        • 启动
        • 修改配置文件
        • 将Redis注册为服务
        • 创建服务文件
        • 添加一下内容
        • 启动并创建服务
      • 命令行操作
        • String
        • Hash
        • List
        • Set
        • Sorted Set
    • Redis常用的一些场景
    • Redis中的缓存失效
    • 关于Redis的一些问题
    • Redis的持久化策略
    • Redis从单机到集群等模式
    • Redis和MySql实现数据一致性
    • 通过Redis实现分布式锁
    • Redis的客户端介绍
  • Linux

  • 中间件
  • Redis
EffectTang
2023-10-29
目录

初始Redis与安装

# 初始Redis与安装

# Redis简介

Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。在存储的时候采用 key-value 的形式。

它比起MySql之类的数据库,性能高得多,这是因为Redis是一种基于内存的缓存系统 – Redis能读的速度是110000次/s,写的速度是81000次/s 。

它的数据通常存储在内存中,但是Redis也会定时把数据写回硬盘中。在重启的时候可以再次加载到内存中进行使用。

Redis官网 (opens new window)

# 支持的数据类型

Redis支持五种基本数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(有序集合)。

  • string(字符串)是Redis最基本的类型,一个key对应一个value。string类型是二进制安全的,支持存储部分简单的数据类型,如数字、字符串等。
  • hash(哈希)是一个键值对的集合,是string类型的field和value的映射表,特别适合用于存储对象。
  • list(列表)是简单的字符串列表,按照插入顺序排序。
  • set(集合)是string类型的无序集合、且集合中元素是唯一的,不重复。
  • zset(有序集合)是set的有序版本,每个元素都有一个分数,根据元素的分数进行排序。

# 安装

在linux环境下安装,因为Redis是基于C语言编写的,因此首先需要安装Redis所需要的gcc依赖:

yum install -y gcc tcl
1

# 下载安装包

wget http://download.redis.io/releases/redis-x.x.x.tar.gz

wget http://download.redis.io/releases/redis-6.2.6.tar.gz

tar -xzvf redis-x.x.x.tar.gz
1
2
3
4
5

根据自己的需求,将 "x.x.x" 替换为你想要下载的Redis版本号。

关于版本的选择,以下是一些建议

场景 推荐版本 理由
新项目,需最新功能 Redis 7.0 功能全面,性能优化显著,云服务兼容性好18
稳定优先,避免协议风险 Redis 6.2 长期支持成熟,协议无商业化限制310
低资源环境 Redis 5.0 内存占用低,基础功能完备2

# 编译与安装

cd redis-x.x.x
make && make install
1
2

编译(make)完成后进行安装(make install),当然你也可以将这两步分开执行。

默认的安装路径是在/usr/local/bin的目录下。进入该文件夹,就可以发现此时它多了一些redis相关的文件,如:

  • redis-cli:redis提供的命令行客户端
  • redis-server:redis的服务端启动脚本
  • redis-sentinel:redis的哨兵启动脚本

# 启动

在Redis的安装目录/usr/local/bin中,执行一下命令:

./redis-server
1

直接运行redis-server脚本,是前台方式运行,只要窗口关闭,redis服务就会挂掉,同时也无法执行其他操作。这种方式很不利于我们使用redis,因此我们通常推荐使用后台方式启动:

  • 后台启动
./redis-server --daemonize yes 
1

Redis默认监听端口为6379。如果你想修改端口,可以编辑配置文件redis.conf进行相应的配置。配置文件在你刚刚解压的文件夹中

  • 启动时,指定配置文件启动
./redis-server ../redis.conf
1

将守护进程修改为yes,即可后台运行。后一个参数为配置文件的路径,可以使用相对路径,也可以使用绝对路径。

# 修改配置文件

  • 备份
cp redis.conf redis.conf bck
1

在修改配置文件之前,为了保险起见,我们先将配置文件进行一次备份。再进行修改

  • 修改——以下是其中一些重要配置
# 监听的地址 默认是 127.0.0.1,修改为0.0.0.0 则可以在任意ip访问,生产环境不要这样设置
bind 127.0.0.1
# 守护进程 修改为yes后即可后台运行,默认为 no
daemonize no
# 密码,设置后 访问redis必须输入密码 默认是被注释掉的 不需要密码
# requirepass foobared
# Accept connections on the specified port, default is 6379 (IANA #815344).
# If port 0 is specified Redis will not listen on a TCP socket.
# 监听的端口
port 6379
# 工作目录 默认是当前目录(server脚本所在的地址),日志、持久化等文件都会保存在这个目录
# 如果不特别设置 dir 参数,默认情况下 Redis 可能会使用编译时指定的目录或执行命令的当前目录。
# 使用 ./ 作为目录值意味着持久化文件会被保存在 Redis 服务启动时所在的目录中。
dir ./
# Set the number of databases. The default database is DB 0, you can select
# a different one on a per-connection basis using SELECT <dbid> where
# dbid is a number between 0 and 'databases'-1
# 数据库数量 默认为16,编号是0-15 ,设置几 代表使用几个数据库
databases 16
# In short... if you have replicas attached it is suggested that you set a lower
# limit for maxmemory so that there is some free RAM on the system for replica
# output buffers (but this is not needed if the policy is 'noeviction').
#
# maxmemory <bytes>
# 设置redis能使用的最大内存
maxmemory 512mb
# Specify the log file name. Also the empty string can be used to force
# Redis to log on the standard output. Note that if you use standard
# output for logging but daemonize, logs will be sent to /dev/null
logfile ""
# 日志文件。默认为空,不记录日志,可以指定日志文件名
# logfile "redis.log"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

# 将Redis注册为服务

为了更方便的使用,你当然也可以将其注册为一个服务,并实现开机自启

# 创建服务文件

创建 systemd 服务文件: 创建一个新的服务文件 /etc/systemd/system/redis.service:

sudo vim /etc/systemd/system/redis.service
1

# 添加一下内容

[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always

[Install]
WantedBy=multi-user.target
1
2
3
4
5
6
7
8
9
10
11
12
13
  • User=redis
    • 指定运行 Redis 服务的用户为 redis。
    • 这是为了遵循最小权限原则,避免以高权限(如 root)运行服务,从而提高系统的安全性。
  • Group=redis
    • 指定运行 Redis 服务的组为 redis。
    • 与 User 配合使用,确保服务进程具有正确的用户和组权限。
  • ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
    • 定义启动 Redis 服务时执行的命令。
    • /usr/local/bin/redis-server 是 Redis 服务器的主程序路径。
    • /etc/redis/redis.conf 是 Redis 的配置文件路径。
    • 这个字段是 [Service] 的核心部分,告诉 systemd 如何启动 Redis 服务。
  • ExecStop=/usr/local/bin/redis-cli shutdown
    • 定义停止 Redis 服务时执行的命令。
    • /usr/local/bin/redis-cli shutdown 使用 Redis 客户端工具优雅地关闭 Redis 服务。
    • 这种方式比直接强制终止进程更安全,因为它会触发 Redis 的持久化操作(如保存数据到磁盘)。
  • Restart=always
    • 定义服务失败时的行为。
    • always 表示无论服务因任何原因退出(包括正常退出、崩溃或被信号终止),systemd 都会自动尝试重新启动它。
    • 其他选项包括:
      • no:不重启。
      • on-failure:仅在非正常退出时重启。
      • on-abnormal:仅在异常退出(如被信号终止或崩溃)时重启。

# 启动并创建服务

sudo systemctl enable redis
sudo systemctl start redis

# 服务状态
sudo systemctl status redis
1
2
3
4
5

# 命令行操作

在线练习redis-操作命令 (opens new window)

以下介绍的都是一些简单的常用命令,更多详细的还请参考官网。

# String

redis 127.0.0.1:6379>set strkey redis-demo
ok
redis 127.0.0.1:6379>get strkey
"redis-demo"
1
2
3
4

在以上实例中我们使用了 SET 和 GET 命令,键为 strkey。

# Hash

redis 127.0.0.1:6379>hset hashkey name tom
1
redis 127.0.0.1:6379>hget hashkey name
"tom"
1
2
3
4

以上例子我们使用了 hSET 和 hGET 命令,键为 hashkey。值为一个键值对-(name-tom)

# List

redis 127.0.0.1:6379>lpush listkey redis-test1 
(integer) 1
redis 127.0.0.1:6379>lpush listkey redis-test22
(integer) 2
redis 127.0.0.1:6379>lrange listkey 0 10
1) "redis-test22"
2) "redis-test1"
1
2
3
4
5
6
7

上述例子中,使用lpush,存了一个List类型的数据,key为listkey,值为一个数组

之后使用lrange key start stop命令,获取列表指定范围内的元素。

# Set

redis 127.0.0.1:6379>sadd demo-key mysql
(integer) 1
redis 127.0.0.1:6379>sadd demo-key oracle
(integer) 1
redis 127.0.0.1:6379>sadd demo-key redis
(integer) 1
redis 127.0.0.1:6379>sadd demo-key mysql
(integer) 0
redis 127.0.0.1:6379>smembers demo-key
1) "mysql"
2) "redis"
3) "oracle"
1
2
3
4
5
6
7
8
9
10
11
12

上述例子中在set集合中添加了4次,但因为其中有重复的元素。因此demo-key中只有三个元素。

# Sorted Set

redis 127.0.0.1:6379> zadd zkey 1 redis
(integer) 1
redis 127.0.0.1:6379> zadd zkey 2 oracle
(integer) 1
redis 127.0.0.1:6379> zadd zkey 3 mysql
(integer) 1
redis 127.0.0.1:6379> zadd zkey 3 mysql
(integer) 0
redis 127.0.0.1:6379> zadd zkey 4 mysql
(integer) 0
redis 127.0.0.1:6379> zrange zkey 0 10 withscores
1) "redis"
2) "1"
3) "oracle"
4) "2"
5) "mysql"
6) "4"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

sorted set是有序集合,但是每个元素都会关联一个double类型的分数。

zadd key score1 member1[score2 member2]-向有序集合添加一个或多个成员,或者更新已存在成员的分数

当然更多的时候,我们不会使用这种方式操作redis,而是在各种编程语言语言中集成的api进行使用。

上次更新: 2025/04/23, 16:23:16
初入认识Ids4
Redis常用的一些场景

← 初入认识Ids4 Redis常用的一些场景→

最近更新
01
面向切面跟自定义注解的结合
05-22
02
时间跟其他数据的序列化
05-19
03
数据加密与安全
05-17
更多文章>
Theme by Vdoing | Copyright © 2023-2025 EffectTang
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式