Redis 学习笔记
一、Redis 简介
- 定义 :Redis(Remote Dictionary Server)是一个开源的、高性能的键值对存储数据库,通常被称为数据结构服务器。
- 数据存储位置 :它将所有数据都存储在内存中,这使得 Redis 具有极高的读写性能,每秒可以处理数十万次操作。同时,Redis 支持数据的持久化功能,可以将内存中的数据保存到磁盘中,防止数据丢失。
- 适用场景 :适用于需要高性能数据读写、数据缓存、消息队列、排行榜等场景,例如在 Web 应用中缓存用户会话信息、存储热点数据以减轻数据库负担等。
二、Redis 的作用
- 缓存 :利用其快速读写特性,将经常访问的数据缓存在内存中,减少对后端数据库的访问次数,提高应用性能。例如,缓存电商网站的商品信息、新闻资讯网站的新闻内容等。
- 消息队列 :可以实现不同系统组件之间的异步通信。比如,在订单处理系统中,当用户下单后,将订单信息放入 Redis 消息队列,然后由后端的订单处理服务异步消费队列中的订单进行处理,提高系统的响应速度和吞吐量。
- 计数器 :由于 Redis 支持原生的原子操作,可以方便地实现计数功能,如统计网站的访问量、用户点赞数等,不用担心并发情况下数据不一致的问题。
- 分布式锁 :在分布式系统环境中,Redis 可以作为分布式锁的实现工具,确保多个节点在访问共享资源时的互斥性,避免资源竞争和数据混乱。
- 排行榜 :利用 Redis 的有序集合数据结构,可以轻松地实现排行榜功能,根据分数对元素进行排序,例如游戏中的玩家排行榜、电商网站的热销商品排行榜等。
三、常用 Redis 命令及作用
1. 连接与服务器相关命令
ping
:用于测试与 Redis 服务器的连接是否正常。如果连接正常,服务器会返回 “PONG”。echo message
:将消息原样返回,用于测试 Redis 是否正常工作。select <dbindex>
:Redis 默认有 16 个数据库(编号从 0 到 15),通过该命令可以选择指定编号的数据库进行操作。databases
:查看 Redis 中数据库的数量。flushdb
:清空当前数据库中的所有数据。flushall
:清空 Redis 实例中所有数据库的数据。
2. 键(Key)相关命令
del key
:删除指定的键。如果键不存在,则不执行任何操作。exists key
:检查指定的键是否存在。如果存在,返回 1;如果不存在,返回 0。expire key seconds
:为指定的键设置过期时间,单位为秒。当键过期后,Redis 会自动删除该键。ttl key
:查看指定键的剩余生存时间(以秒为单位)。如果键没有设置过期时间,则返回 -1;如果键不存在,则返回 -2。keys pattern
:根据给定的模式查找所有匹配的键。例如,keys user*
可以查找所有以 “user” 开头的键。type key
:获取指定键所存储的值的类型,如字符串、列表、集合等。
3. 字符串(String)类型相关命令
set key value
:将指定键的值设置为给定的字符串。如果键已经存在,会覆盖原有的值。get key
:获取指定键的值。如果键不存在,则返回空。getset key value
:将指定键的值设置为新值,并返回键的旧值。如果键不存在,则相当于执行 set key value
操作,并返回空。append key value
:将指定的值追加到键原来值的末尾。如果键不存在,则相当于执行 set key value
操作。incr key
:将键对应的值(必须为数字)递增 1。如果键不存在,则先初始化为 0,再递增 1。incrby key increment
:将键对应的值递增指定的整数 increment。类似地,decr key
和 decrby key decrement
用于将值递减。mget key1 [key2 ...]
:获取多个键的值,并以列表形式返回。mset key1 value1 [key2 value2 ...]
:同时设置多个键值对。
4. 列表(List)类型相关命令
rpush key value1 [value2 ...]
:将一个或多个值插入到列表键的尾部。如果键不存在,则先创建一个空列表,再执行插入操作。lpush key value1 [value2 ...]
:将一个或多个值插入到列表键的头部。lpop key
:移除并返回列表键的第一个元素。rpop key
:移除并返回列表键的最后一个元素。lrange key start stop
:获取列表键中指定区间内的元素。例如,lrange key 0 -1
可以获取整个列表的所有元素。lrem key count value
:根据参数 count 的值,从列表中移除指定数量的等于 value 的元素。count 为 0,移除所有等于 value 的元素;count > 0,从头部开始移除;count < 0,从尾部开始移除。llen key
:获取列表键的长度,即列表中元素的数量。
5. 哈希(Hash)类型相关命令
hset key field value
:将哈希表 key 中的字段 field 的值设置为 value。如果字段已经存在,则覆盖原有的值。hget key field
:获取哈希表 key 中字段 field 的值。hmget key field1 [field2 ...]
:获取哈希表 key 中多个字段的值,返回一个列表。hmset key field1 value1 [field2 value2 ...]
:同时设置哈希表 key 中多个字段的值。hkeys key
:获取哈希表 key 中所有的字段名。hvals key
:获取哈希表 key 中所有的字段值。hgetall key
:获取哈希表 key 中所有的字段及其对应的值,以列表形式返回,交替出现字段名和字段值。hdel key field1 [field2 ...]
:删除哈希表 key 中的一个或多个字段。
6. 集合(Set)类型相关命令
sadd key member1 [member2 ...]
:将一个或多个成员添加到集合 key 中。集合中的成员是唯一的,所以如果成员已经存在,则不会重复添加。smembers key
:获取集合 key 中的所有成员。srem key member1 [member2 ...]
:移除集合 key 中的一个或多个成员。spop key
:移除并返回集合 key 中的一个随机成员。scard key
:获取集合 key 中成员的数量。sismember key member
:判断 member 是否是集合 key 的成员。如果是,返回 1;否则返回 0。sinter key1 [key2 ...]
:计算多个集合的交集,并返回结果。sunion key1 [key2 ...]
:计算多个集合的并集,并返回结果。sdiff key1 [key2 ...]
:计算多个集合的差集(即只存在于第一个集合中的成员),并返回结果。
7. 有序集合(Sorted Set)类型相关命令
zadd key score1 member1 [score2 member2 ...]
:将一个或多个成员及其对应的分数添加到有序集合 key 中。如果成员已经存在,则更新其分数。zrange key start stop [withscores]
:获取有序集合 key 中指定区间内的成员,默认按分数从小到大排序。如果使用 withscores 参数,还会返回每个成员的分数。zrevrange key start stop [withscores]
:获取有序集合 key 中指定区间内的成员,但按分数从大到小排序。zrem key member1 [member2 ...]
:移除有序集合 key 中的一个或多个成员。zcard key
:获取有序集合 key 中成员的数量。zscore key member
:获取有序集合 key 中成员 member 的分数。zincrby key increment member
:将有序集合 key 中成员 member 的分数增加指定的 increment 值。zrangebyscore key min max [withscores]
:获取有序集合 key 中分数在 min 和 max 之间的所有成员,可选择是否返回成员的分数。