Redis(Remote Dictionary Server)是一个支持网络、基于内存、分布式、可选持久性的键值对存储数据库。

安装

yum -y install redis

# 测试
[root@localhost ~]# redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>

# 远程连接
redis-cli -h host -p port -a password

# 报错
[root@localhost ~]# redis-cli
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected>

# 解决(因为没启动)
[root@localhost ~]# systemctl status redis
○ redis.service - Redis persistent key-value database
     Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled; preset: disabled)
    Drop-In: /etc/systemd/system/redis.service.d
             └─limit.conf
     Active: inactive (dead)
[root@localhost ~]# systemctl start redis

配置

# 查看所有配置
127.0.0.1:6379> CONFIG GET *  
# 修改配置
127.0.0.1:6379> CONFIG SET <设置名> <新值>

数据类型

  • string(字符串): 基本的数据存储单元,可以存储字符串、整数或者浮点数。
  • hash(哈希):一个键值对集合,可以存储多个字段。
  • list(列表):一个简单的列表,可以存储一系列的字符串元素。
  • set(集合):一个无序集合,可以存储不重复的字符串元素。
  • zset(sorted set:有序集合): 类似于集合,但是每个元素都有一个分数(score)与之关联。
  • 位图(Bitmaps):基于字符串类型,可以对每个位进行操作。
  • 超日志(HyperLogLogs):用于基数统计,可以估算集合中的唯一元素数量。
  • 地理空间(Geospatial):用于存储地理位置信息。
  • 发布/订阅(Pub/Sub):一种消息通信模式,允许客户端订阅消息通道,并接收发布到该通道的消息。
  • 流(Streams):用于消息队列和日志存储,支持消息的持久化和时间排序。
  • 模块(Modules):Redis 支持动态加载模块,可以扩展 Redis 的功能。

操作

序号命令及描述
1DEL key 该命令用于在 key 存在时删除 key。
2DUMP key 序列化给定 key ,并返回被序列化的值。
3EXISTS key 检查给定 key 是否存在。
4EXPIRE key seconds 为给定 key 设置过期时间,以秒计。
5EXPIREAT key timestamp EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。
6PEXPIRE key milliseconds 设置 key 的过期时间以毫秒计。
7PEXPIREAT key milliseconds-timestamp 设置 key 过期时间的时间戳(unix timestamp) 以毫秒计
8KEYS pattern 查找所有符合给定模式( pattern)的 key 。
9MOVE key db 将当前数据库的 key 移动到给定的数据库 db 当中。
10PERSIST key 移除 key 的过期时间,key 将持久保持。
11PTTL key 以毫秒为单位返回 key 的剩余的过期时间。
12TTL key 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
13RANDOMKEY 从当前数据库中随机返回一个 key 。
14RENAME key newkey 修改 key 的名称
15RENAMENX key newkey 仅当 newkey 不存在时,将 key 改名为 newkey 。
16[SCAN cursor [MATCH pattern] [COUNT count]](https://www.runoob.com/redis/keys-scan.html) 迭代数据库中的数据库键。
17TYPE key 返回 key 所储存的值的类型。

实际操作

字符串

redis 127.0.0.1:6379> SET test "HelloWarld!"
OK
redis 127.0.0.1:6379> GET test
"HelloWarld!"

累了

安全

# 查看是否开启密码
127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) ""

# 设置密码
127.0.0.1:6379> CONFIG set requirepass "123456"
OK
127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) "123456"

# 测试(重进之后)
127.0.0.1:6379> SET abc 111
(error) NOAUTH Authentication required.

# 登录
127.0.0.1:6379> AUTH 123456
OK
127.0.0.1:6379> GET test 
"HelloWorld!"

备份 / 集群

# 备份(保存到 redis 安装目录中的 dump.rdb 文件)
127.0.0.1:6379> SAVE 

# 获取安装目录
127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/var/lib/redis"

# 后台备份
127.0.0.1:6379> BGSAVE

主从备份

redis十分的方便啊,主服务器默认接受从服务器请求,不需要配置

从服务器配置:

127.0.0.1:6379> config set port 6380
OK
127.0.0.1:6379> exit
[root@localhost ~]# redis-cli 
Could not connect to Redis at 127.0.0.1:6379: Connection refused

redis-cli -p 6380
# 加入
127.0.0.1:6380> REPLICAOF 192.168.10.3 6379

# 纠错
# 如果无法获取,请检查
防火墙
# 主
CONFIG SET bind "0.0.0.0 -::1"
CONFIG SET protected-mode "no"
# 从
replicaof no one # 清除
replicaof 192.168.10.3 6379 # 再加入

集群

所有节点都需要配置,使用CONFIG SET CONFIG_NAME SET_CONFIG_VALUE

# 节点端口号(每个节点都设置不同的!!)
port 7001

# 开启集群模式
cluster-enabled yes

# 节点超时时间
cluster-node-timeout 15000
十分不好消息:下面这个文档我没看懂... 点我自己看原文大脑升级

像这样的配置,一共需要创建6个,我们做一个三主三从的集群。

  1. 启动Redis节点:使用如下命令启动6个节点:

    redis> redis-server redis_7001.conf
  2. 创建Redis Cluster:使用Redis命令行工具执行如下命令创建Cluster:

    redis> redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1

    cluster-replicas 表示从节点的数量,1代表每个主节点都有一个从节点。

  3. 验证Cluster模式:向Cluster发送请求,观察请求是否正确路由到相应的节点。