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 之间的所有成员,可选择是否返回成员的分数。