官网下载地址
https://download.redis.io/releases/
下载安装启动
安装依赖包
#redis-5.0.3这个版本的依赖包验证通过
[root@localhost ~]# yum -y install gcc-c++ glibc-headers tcl
下载安装包
wget http://download.redis.io/releases/redis-6.2.5.tar.gz
wget http://download.redis.io/releases/redis-5.0.3.tar.gz
wget https://repo.huaweicloud.com/redis/redis-5.0.3.tar.gz
解压
[root@localhost ~]# tar -zxvf redis-5.0.3.tar.gz
编译
#在编译Redis时指定使用标准libc库中的内存管理函数来进行内存分配。
#这样做可能是为了解决编译问题,或者是为了满足特定的性能和兼容性需求。
#在选择内存分配器时,应考虑实际应用的特点,并进行相应的性能测试,以确保选择最适合当前需求的分配器
[root@localhost redis-5.0.3]# cd redis-5.0.3
[root@localhost redis-5.0.3]# make MALLOC=libc
安装
[root@localhost redis-5.0.3]# cd src/
[root@localhost src]# make install PREFIX=/opt/redis/
拷贝conf文件到安装后的路径下
[root@localhost redis-5.0.3]# cp /root/redis-5.0.3/redis.conf /opt/redis/bin/
启动redis
#方式1:直接启动,无后台,启动时直接显示实时日志
[root@localhost redis-5.0.3]# /opt/redis/bin/redis-server /opt/redis/bin/redis.conf
-----------------------------------------------------
#方式2:手动添加后台启动(推荐此方式)
[root@localhost redis-5.0.3]# nohup /opt/redis/bin/redis-server /opt/redis/bin/redis.conf > redis.log 2>&1 &
------------------------------------------------------
#方式3:修改配置文件,在redis.conf中找到下面的值,把no改为yes(不推荐此方式,找不到日志在哪里)
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
#daemonize no
daemonize yes
#再次之前直接启动的方式
[root@localhost bin]# /opt/redis/bin/redis-server /opt/redis/bin/redis.conf
2301:C 14 Jun 2024 22:41:49.271 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
2301:C 14 Jun 2024 22:41:49.271 # Redis version=5.0.3, bits=64, commit=00000000, modified=0, pid=2301, just started
2301:C 14 Jun 2024 22:41:49.271 # Configuration loaded
登录redis
标准登录方式
[root@localhost bin]# /opt/redis/bin/redis-cli -h host -p port -a password
使用的是默认端口 也没有设置密码
[root@localhost ~]# ps -ef|grep redis
root 2225 1277 0 22:33 pts/0 00:00:00 /opt/redis/bin/redis-server 127.0.0.1:6379
[root@localhost bin]# /opt/redis/bin/redis-cli
127.0.0.1:6379> set name wangjian #设置key value
OK
127.0.0.1:6379> get name #通过key获取到value
"wangjian"
127.0.0.1:6379> keys * #获取所有的key
1) "name"
有密码且端口也不一样的登录方式
[root@localhost bin]# /opt/redis/bin/redis-cli -p 16379 #指定端口
127.0.0.1:16379> auth wangjian #输入密码wangjian
OK
127.0.0.1:16379> keys *
(empty list or set)
127.0.0.1:16379> set name wang
OK
127.0.0.1:16379> get name
"wang"
127.0.0.1:16379> keys *
1) "name"
127.0.0.1:16379>
修改redis端口
在redis.conf中修改
# 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 16379
修改redis密码
在redis.conf中修改
# Warning: since Redis is pretty fast an outside user can try up to
# 150k passwords per second against a good box. This means that you should
# use a very strong password otherwise it will be very easy to break.
#
requirepass wangjian
开启远程访问
步骤1:
#把redis.conf配置文件中的127.0.0.1注释掉就可以开启远程访问了
# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
# JUST COMMENT THE FOLLOWING LINE.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#bind 127.0.0.1
步骤2:
把redis.conf配置文件中的protected-mode 设置成no
默认是设置成yes的, 防止了远程访问,在redis3.2.3版本后
# even if no authentication is configured, nor a specific set of interfaces
# are explicitly listed using the "bind" directive.
protected-mode no
设置开机自启
编辑启动服务文件
vim /etc/systemd/system/redis.service
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
User=root
Group=root
ExecStart=/opt/redis/bin/redis-server /opt/redis/bin/redis.conf --logfile /root/redis.log
ExecStop=/usr/bin/redis-cli shutdown
Restart=always
[Install]
WantedBy=multi-user.target
重新加载系统服务
systemctl daemon-reload
设置开机启动
systemctl daemon-reload
#禁止开机自启
systemctl disable redis
服务启停
[root@localhost ~]# systemctl status redis
[root@localhost ~]# systemctl stop redis
[root@localhost ~]# systemctl start redis
持久化数据设置
Redis 的持久化有两种主要方式:RDB(Redis Database Backup)和 AOF(Append Only File)。这两种方式各有优缺点,选择哪一种取决于你的具体需求,比如数据安全性、性能要求和恢复速度等。
RDB 持久化
RDB 是 Redis 默认的持久化方式,它会在特定的时间点创建数据集的快照,并将其保存到硬盘上。当 Redis 重启时,它会从最近的 RDB 文件恢复数据。
配置 RDB 持久化
打开 Redis 的配置文件,通常是 /etc/redis/redis.conf。
查找 save 行,这一行定义了在何种情况下 Redis 会执行一次快照保存。默认配置可能如下:
save 900 1
save 300 10
save 60 10000
#解释说明:
如果在 900 秒内至少有一个 key 被更改,就会触发保存;
如果在 300 秒内至少有 10 个 key 被更改,就会触发保存;
如果在 60 秒内至少有 10000 个 key 被更改,就会触发保存。
如果你不想使用默认的策略,可以自定义 save
参数,或者完全禁用 RDB 持久化,通过注释掉 save
行。
配置 RDB 文件的名称和保存位置:
dbfilename dump.rdb
dir /var/lib/redis
这将告诉 Redis 将 RDB 文件保存在 /var/lib/redis/dump.rdb
dbfilename dump.rdb
dir ./
也有可能是这样显示,数据保存的位置取决你在哪个目录进行启动,我在/root/在执行的启动脚本,所以数据文件就会在/root/下。但是在配置文件中就会显示在./下。
AOF 持久化
AOF 方法会记录所有写入操作的命令,并追加到文件中。这种方式可以提供更高的数据安全性,因为即使在断电的情况下,也只会丢失最后一条命令。
- 配置 AOF 持久化,在配置文件中启用 AOF 持久化:
appendonly yes
- 配置 AOF 文件的重写策略,避免 AOF 文件无限增长:
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
这里都是默认的设置,appendfsync everysec
表示每秒钟将 AOF 文件写入磁盘一次,这提供了一个较好的数据安全性和性能平衡,实际的大小,可以根据情况做调整。
- 指定 AOF 文件的保存位置:
dir /var/lib/redis
aof-file /var/lib/redis/appendonly.aof
注意,aof-file
不是标准的 Redis 配置选项,你应该使用 appendfilename
:
appendfilename "appendonly.aof"
完整配置信息如下:
# Please check http://redis.io/topics/persistence for more information.
appendonly yes
# The name of the append only file (default: "appendonly.aof")
appendfilename "appendonly.aof"
- 重启 Redis
设置键的过期时间
#设置name的值 10秒过期
127.0.0.1:6379> setex name 10 wang
OK
127.0.0.1:6379> get name
"wang"
127.0.0.1:6379> get name #10秒后再查询
(nil)
增删改查
查询
#查询所有的key
127.0.0.1:6379> keys *
1) "xingbie"
2) "name"
127.0.0.1:6379>
查询key的值
#查询一个key的值
127.0.0.1:6379> get a
"xiaoming"
#查询多个key值
127.0.0.1:6379> mget a b c
1) "xiaoming"
2) "xiaohong"
3) "zhangsan"
#获取所有value的值
新增
新增一个字符串使用set进行设置
[root@localhost bin]# pwd
/opt/redis/bin
[root@localhost bin]# ./redis-cli
127.0.0.1:6379> set name wj
OK
127.0.0.1:6379> get name
"wj"
127.0.0.1:6379
#使用set,有一个特性,就是值容易覆盖,比如下面
[root@localhost bin]# ./redis-cli
127.0.0.1:6379> set name wj
OK
127.0.0.1:6379> get name
"wj"
127.0.0.1:6379> set name haha
OK
127.0.0.1:6379> get name
"haha"
127.0.0.1:6379>
#使用setnx进行设置,就不会覆盖
127.0.0.1:6379> setnx xingbie nan
(integer) 1 #表示设置成功
127.0.0.1:6379> get xingbie
"nan"
127.0.0.1:6379> setnx xingbie nv
(integer) 0 #表示设置错误
127.0.0.1:6379> get xingbie
"nan"
127.0.0.1:6379>
追加值
#使用append
127.0.0.1:6379> set a wang
OK
127.0.0.1:6379> get a
"wang"
127.0.0.1:6379> append a jian #追加值
(integer) 8
127.0.0.1:6379> get a
"wangjian"
127.0.0.1:6379>
127.0.0.1:6379> set a wang
OK
127.0.0.1:6379> append a " jian" #带空格的加法
(integer) 9
127.0.0.1:6379> get a
"wang jian"
127.0.0.1:6379>
新增多值
#使用mset新增多值
127.0.0.1:6379> mset a xiaoming b xiaohong c zhangsan
OK
127.0.0.1:6379> keys *
1) "b"
2) "c"
3) "xingbie"
4) "a"
127.0.0.1:6379>
删除
删除一个key
127.0.0.1:6379> keys *
1) "xingbie"
2) "name"
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> keys *
1) "xingbie"
127.0.0.1:6379>
集群设置
Redis提供了三种集群模式,主从复制模式、哨兵模式和集群模式。这些模式各具特点,适用于不同的场景和需求。具体介绍如下:
主从复制模式
定义与工作原理:主从复制模式是最基本的Redis集群形式,其中包含一个主节点(Master)和一个或多个从节点(Slave)。主节点处理所有写操作并将数据同步给从节点,而从节点则主要用于读操作,实现读写分离。这种模式通过从节点复制主节点的数据来备份数据,并提高读取性能。
配置和使用:配置主从模式相对简单,只需在从节点的配置文件中指定主节点的信息,然后启动从节点即可开始数据同步过程。此模式不需要额外的配置或管理,便于快速部署和运行。
优点和局限性:主从复制模式的优点在于其简洁性和高效性,能够有效地进行读写分离,提高系统的读取性能。然而,这种模式的主要局限在于无法自动故障转移;如果主节点发生故障,系统需要人工介入以恢复服务。
哨兵模式
定义与工作原理:哨兵模式是在主从复制的基础上,增加了哨兵节点(Sentinel),用于监控主节点和从节点的状态,并在主节点故障时自动进行故障转移,提升系统的可用性。哨兵节点不仅负责监控Redis服务器的运行状态,还提供通知、自动故障迁移等重要功能。
配置和使用:配置哨兵模式涉及设置哨兵节点监控的主节点信息及故障转移策略。启动后,哨兵节点会自动执行监控和故障转移操作,简化了系统的维护工作。
优点和局限性:哨兵模式的主要优势在于能自动进行故障检测和恢复,极大提高了系统的可靠性。然而,它也引入了额外的复杂性和需要更多资源来维护哨兵节点的问题。
集群模式
定义与工作原理:集群模式是一种更为复杂的分布式解决方案,支持数据分片和多主多从结构。在这种模式下,整个数据集被分为多个部分(哈希槽),每个节点负责存储一部分数据。这允许系统在多个节点间共享数据存储和读取负载,优化性能和存储能力。
配置和使用:配置集群模式较为复杂,需要在每个节点上配置集群模式并定义其他节点信息。一旦配置完成,集群可以自动管理数据分布和节点间的通信,有效处理高并发请求。
优点和局限性:集群模式的主要优点是支持大规模的数据操作和高并发访问,同时提供高可用性和良好的水平扩展性。然而,这也使得它的配置和维护比主从和哨兵模式更为复杂,可能需要更多的资源和管理投入。