Redis是一种高性能的开源键值存储数据库,它支持各种数据结构,包括字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等。
Redis主要用于缓存、会话存储、消息队列等场景,以及用作数据库、应用程序的内存数据库。
1. 键值存储:
- Redis是一个键值存储数据库,它使用键(key)和值(value)的方式来存储数据。
- 键是唯一的标识符,值可以是各种类型的数据,包括字符串、哈希、列表、集合、有序集合等。
- Redis支持对存储在键中的数据执行各种操作,如读取、写入、删除、更新等。
Redis提供了丰富的命令集合,用于执行各种基本操作,包括数据的存储、读取、删除、更新等。下面是Redis的一些基本操作及其对应的命令:
- 字符串操作:
SET key value [NX|XX] [EX seconds] [PX milliseconds] [GET]
key
:要设置的键名。value
:要设置的值。NX
:可选参数,表示只在键不存在时才设置值。(初始设置值)XX
:可选参数,表示只在键已经存在时才设置值。(修改值)EX seconds
:可选参数,将键的过期时间设置为指定的秒数。(-1 表示永远不过期,-2 表示已过期)PX milliseconds
:可选参数,将键的过期时间设置为指定的毫秒数。GET
:可选参数,返回键的旧值。
其他操作:
- 存储字符串:
SET key value
- 读取字符串:
GET key
- 删除字符串:
DEL key
- 检查键是否存在:
EXISTS key
- 设置字符串的过期时间:
EXPIRE key seconds
-
哈希操作:
- 存储哈希:
HSET key field value
- 读取哈希:
HGET key field
- 删除哈希中的字段:
HDEL key field [field ...]
- 获取哈希的所有字段和值:
HGETALL key
- 检查哈希字段是否存在:
HEXISTS key field
- 获取哈希中的所有字段:
HKEYS key
- 存储哈希:
-
列表操作:
- 在列表左侧插入元素:
LPUSH key value [value ...]
- 在列表右侧插入元素:
RPUSH key value [value ...]
- 读取列表:
LRANGE key start stop
- 获取列表长度:
LLEN key
- 弹出列表左侧的元素:
LPOP key
- 弹出列表右侧的元素:
RPOP key
- 在列表左侧插入元素:
-
集合操作:
- 添加元素到集合:
SADD key member [member ...]
(不能重复) - 移除元素从集合:
SREM key member [member ...]
- 获取集合中的所有元素:
SMEMBERS key
- 检查元素是否存在于集合中:
SISMEMBER key member
- 获取集合的大小:
SCARD key
- 添加元素到集合:
-
有序集合操作:
- 添加元素到有序集合:
ZADD key score member [score member ...]
- 获取有序集合的成员和分数:
ZRANGE key start stop [WITHSCORES]
- 移除有序集合中的元素:
ZREM key member [member ...]
- 获取有序集合的成员数量:
ZCARD key
- 按分数范围获取有序集合的成员:
ZRANGEBYSCORE key min max [WITHSCORES]
- 添加元素到有序集合:
-
键操作:
- 删除键:
DEL key
- 获取所有匹配给定模式的键:
KEYS pattern
- 查看键的类型:
TYPE key
- 设置键的过期时间:
EXPIRE key seconds
- 删除键:
-
其他操作:
- 发布消息到指定的频道:
PUBLISH channel message
- 订阅一个或多个频道:
SUBSCRIBE channel [channel ...]
- 取消订阅一个或多个频道:
UNSUBSCRIBE [channel [channel ...]]
- 发布消息到指定的频道:
2. 数据结构:
- Redis支持多种数据结构,包括字符串、哈希、列表、集合、有序集合等。
- 字符串是最简单的数据结构,可以存储文本、整数等类型的数据。
- 哈希用于存储对象,类似于字典或映射。
- 列表是有序的字符串集合,支持从两端进行插入、删除等操作。
- 集合是无序的字符串集合,支持集合运算,如并集、交集、差集等。
- 有序集合类似于集合,但每个成员都关联一个分数,可以根据分数对成员进行排序。
3. 持久化:
- Redis支持两种持久化方式:RDB(Redis DataBase)和AOF(Append Only File)。
- RDB是一种快照持久化方式,定期将内存中的数据保存到磁盘上。
- AOF是一种追加日志持久化方式,将每个写操作追加到一个日志文件中,以保证数据的持久性。
rdb
打开 redis.windows.config 文件
dump.rdb 文件就是存储快照的信息。
但是他也有弊端,如果快照时间是一个小时生效,在一个半小时的时候发生宕机,那么数据就会丢失。所以 rdb 一般用于做数据备份(比如每晚12点对前一天的数据进行备份)。
手动存储也是可以的。
aof
默认是no,可以手动改为 yes。那么就可以将每次写的操作存到一个文件里面。
4. 缓存:
- Redis常被用作缓存,可以将频繁访问的数据存储在内存中,以提高访问速度。
- Redis支持设置过期时间,可以自动删除过期的缓存数据,以节省内存空间。
5. 发布/订阅:
- Redis支持发布/订阅模式,允许客户端订阅一个或多个频道,并在频道中接收消息。
- 这种模式常用于实现消息队列、即时通讯等功能。
但此时并没有持久化。
6. 事务:
- Redis支持事务,允许一组命令(多个命令)作为一个原子操作执行。
- 使用MULTI命令开始事务,使用EXEC命令提交事务,或者使用DISCARD命令取消事务。
- 不像 MySQL,Redis 的事务不支持回滚。
7. 集群:
- Redis提供了集群功能,允许将数据分布在多个节点上,以提高性能和可扩展性。
- Redis集群使用分片(sharding)来实现数据的水平分布。
8. Lua脚本:
- Redis支持Lua脚本,允许在服务器端执行脚本来实现复杂的数据操作。
9. 主从复制:
Redis主从复制是一种数据复制和同步机制,其中一个Redis服务器(称为主服务器)将其数据复制到一个或多个其他Redis服务器(称为从服务器)。主从复制提供了数据冗余备份、读写分离和故障恢复等功能。
具体使用见:Nodejs 第四十七章(redis主从复制) - 掘金 (juejin.cn)