redis简介
全称:Remote Dictionary Server(远程字典服务器)。
类型:基于内存的键值型 NoSQL 数据库。
诞生年份:2009年。
Redis 的特点
-
键值(Key-Value)型:
数据结构:支持多种数据结构,如字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)、有序集合(SortedSets)等,功能丰富。 -
单线程:
Redis 使用单线程架构,每个命令具有原子性,即每个命令的执行是独立且不被打断的。 -
低延迟,速度快:
基于内存存储,利用 IO 多路复用技术,编码效率高,具有极低的延迟和高性能。 -
支持数据持久化:
提供 RDB 快照和AOF 日志两种持久化方式,以保证数据的持久性和恢复能力。 -
支持主从集群、分片集群:
支持多种集群架构,可以实现数据的主从复制,提高可用性和扩展性。 -
支持多语言客户端:
提供丰富的客户端支持,几乎涵盖了所有主流编程语言,如 Python、Java、C++、Node.js 等。
redis安装
方法一:通过包管理器安装
1. 在 Ubuntu/Debian 上安装
sudo apt update
sudo apt install redis-server
安装完成后,可以使用以下命令启动 Redis 服务:
sudo systemctl start redis-server
检查 Redis 是否启动成功:
redis-cli ping
如果返回 PONG,说明安装成功。
2. 在 CentOS/RHEL 上安装
sudo yum install epel-release
sudo yum install redis
安装完成后,启动 Redis 服务:
sudo systemctl start redis
检查 Redis 是否启动成功:
redis-cli ping
方法二:从源代码编译安装
如果需要最新版本或自定义构建,可以从源代码编译安装:
1. 下载并解压 Redis 源代码
wget http://download.redis.io/releases/redis-6.2.6.tar.gz
tar xzf redis-6.2.6.tar.gz
cd redis-6.2.6
2. 编译并安装
make
sudo make install
注意: 在编译过程中,如果 make 命令失败,可以尝试运行 ‘make distclean’ 然后重新执行 make。
3. 启动 Redis 服务
src/redis-server
或者使用提供的配置文件启动:
src/redis-server redis.conf
4. 测试 Redis
src/redis-cli
在 Redis CLI 中输入:
ping
如果返回 PONG,则说明安装成功。
方法三:使用 Docker 安装
Docker 是一种快速简便的方式来运行 Redis,无需直接在宿主机上安装任何软件包。
1. 拉取 Redis 镜像
docker pull redis
2. 运行 Redis 容器
docker run --name my-redis -d redis
3. 连接到 Redis
你可以通过以下命令连接到 Redis CLI:
docker exec -it my-redis redis-cli
在 CLI 中输入 ping 来测试连接:
ping
返回 PONG 表示安装成功。
redis配置文件
Redis 的配置文件路径通常在以下位置:
默认路径:/etc/redis/redis.conf
自定义路径:可以在启动 Redis 时指定配置文件路径,例如 redis-server /path/to/redis.conf
配置项名称 | 默认值 | 说明 |
---|---|---|
bind | 127.0.0.1 | Redis 监听的 IP 地址,默认只允许本地访问。可配置为 0.0.0.0 以允许外部访问。 |
port | 6379 | Redis 服务器监听的端口。 |
timeout | 0 | 客户端空闲多长时间(秒)后断开连接,0 表示不超时。 |
tcp-keepalive | 300 | TCP 保活时间,单位为秒。 |
daemonize | no | 是否以后台守护进程方式运行 Redis,yes 为后台运行,no 为前台运行。 |
pidfile | /var/run/redis_6379.pid | Redis 进程的 PID 文件路径。 |
loglevel | notice | 日志级别,选项有 debug、verbose、notice、warning。 |
logfile | “” | 日志文件路径,默认输出到标准输出。 |
databases | 16 | Redis 实例支持的数据库数量,默认 16 个数据库。 |
save | 900 1;300 10;60 10000 | RDB 快照保存规则,在指定秒数内发生指定次数的更改后进行保存。 |
stop-writes-on-bgsave-error | yes | RDB 持久化出错时是否停止写操作,yes 为停止,no 为继续。 |
rdbcompression | yes | 是否压缩 RDB 文件,yes 为压缩,no 为不压缩。 |
rdbchecksum | yes | 是否启用 RDB 文件的校验和,yes 为启用,no 为禁用。 |
dbfilename | dump.rdb | RDB 文件名。 |
dir | /var/lib/redis | RDB 和 AOF 文件存放路径。 |
requirepass | “” | Redis 访问密码。 |
rename-command | “” | 重命名或禁用命令,例如 rename-command FLUSHALL “” 禁用 FLUSHALL。 |
maxmemory | 0 | Redis 使用的最大内存,0 表示不限制。 |
maxmemory-policy | noeviction | 内存达到上限后的处理策略,选项有 noeviction、allkeys-lru、volatile-lru、allkeys-random、volatile-random、volatile-ttl。 |
slaveof | “” | 配置从服务器连接的主服务器的 IP 和端口,例如 slaveof 127.0.0.1 6379。 |
masterauth | “” | 从服务器连接主服务器时的认证密码。 |
cluster-enabled | no | 是否启用 Redis 集群模式,yes 为启用,no 为禁用。 |
cluster-config-file | nodes.conf | 集群节点配置文件名。 |
cluster-node-timeout | 15000 | 集群节点超时时间,单位为毫秒。 |
lua-time-limit | 5000 | Lua 脚本的执行时间限制,单位为毫秒。 |
redis数据类型
Redis 主要支持以下几种数据类型:
string(字符串): 基本的数据存储单元,可以存储字符串、整数或者浮点数。
hash(哈希):一个键值对集合,可以存储多个字段。
list(列表):一个简单的列表,可以存储一系列的字符串元素。
set(集合):一个无序集合,可以存储不重复的字符串元素。
zset(sorted set:有序集合): 类似于集合,但是每个元素都有一个分数(score)与之关联。
位图(Bitmaps):基于字符串类型,可以对每个位进行操作。
超日志(HyperLogLogs):用于基数统计,可以估算集合中的唯一元素数量。
地理空间(Geospatial):用于存储地理位置信息。
发布/订阅(Pub/Sub):一种消息通信模式,允许客户端订阅消息通道,并接收发布到该通道的消息。
流(Streams):用于消息队列和日志存储,支持消息的持久化和时间排序。
模块(Modules):Redis 支持动态加载模块,可以扩展 Redis 的功能。
redis通用命令
1、 连接redis服务
连接本地的 redis 服务。
$ redis-cli
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING
PONG
在以上实例中我们连接到本地的 redis 服务并执行 PING 命令,该命令用于检测 redis 服务是否启动。
在远程服务上执行命令
$ redis-cli -h host -p port -a password
实例
以下实例演示了如何连接到主机为 127.0.0.1,端口为 6379 ,密码为 mypass 的 redis 服务上。
$redis-cli -h 127.0.0.1 -p 6379 -a "mypass"
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING
PONG
2、查看命令说明及用法 help @generic
3、其他常用命令
命令 | 语法 | 说明 |
---|---|---|
SET | SET [key] [value] | 设置指定键的值。如果键已经存在,值将被覆盖。 |
GET | GET [key] | 获取指定键的值。如果键不存在,返回 nil。 |
DEL | DEL [key] | 删除指定的键值对,可以一次删除多个键。 |
EXISTS | EXISTS [key] | 检查指定键是否存在,存在返回 1,不存在返回 0。 |
EXPIRE | EXPIRE [key] [seconds] | 为指定的键设置过期时间(秒)。 |
TTL | TTL [key] | 获取指定键的剩余过期时间,单位为秒。如果键没有设置过期时间或不存在,返回 -1。 |
KEYS | KEYS [pattern] | 查找匹配指定模式的所有键。模式可以包含通配符 *(匹配任意字符)、?(匹配单个字符)等。 |
INCR | INCR [key] | 将指定键的值加 1。如果键不存在,首先将键的值初始化为 0。 |
DECR | DECR [key] | 将指定键的值减 1。如果键不存在,首先将键的值初始化为 0。 |
HSET | HSET [key] [field] [value] | 在哈希表中设置指定字段的值。如果字段不存在,将创建该字段。 |
HGET | HGET [key] [field] | 获取哈希表中指定字段的值。 |
LPUSH | LPUSH [key] [value] | 将一个值插入列表的头部。如果列表不存在,将创建一个新的列表。 |
RPUSH | RPUSH [key] [value] | 将一个值插入列表的尾部。如果列表不存在,将创建一个新的列表。 |
LPOP | LPOP [key] | 移除并返回列表的第一个元素。 |
RPOP | RPOP [key] | 移除并返回列表的最后一个元素。 |
SADD | SADD [key] [member] | 向集合添加一个成员。如果成员已经存在,将被忽略。 |
SMEMBERS | SMEMBERS [key] | 返回集合中的所有成员。 |
ZADD | ZADD [key] [score] [member] | 向有序集合中添加一个成员及其分数。如果成员已经存在,分数将被更新。 |
ZRANGE | ZRANGE [key] [start] [stop] | 返回有序集合中指定范围内的成员,按分数升序排列。 |
FLUSHDB | FLUSHDB | 清空当前数据库中的所有键值对。 |
INFO | INFO | 返回 Redis 服务器的各种信息和统计数据。 |