摘要:本文学习了Redis的基本使用方法,包括简单配置和基本操作。
环境
Windows 10 企业版 LTSC 21H2
Redis 7.4.8
1 简单配置
默认使用安装目录下的redis.conf文件作为配置文件。
1.1 密码
作为使用在内存缓存层面的数据库,默认信任本地网络环境,所以默认没有密码。
在6.0版本以后,支持设置密码,并且支持通过ACL设置多用户不同权限,使用ACL会导致密码失效。
示例:
1 | requirepass 123456 |
1.2 绑定地址
默认绑定127.0.0.1,只允许本地连接,如果设置为0.0.0.0,将允许所有网卡地址连接。
修改绑定地址:
1 | bind 0.0.0.0 |
1.3 安全模式
默认情况下使用安全模式,在安全模式下,如果没有设置密码,只能从本地连接。
禁用安全模式:
1 | protected-mode no |
1.4 远程访问
如果需要支持远程访问,需要修改以下配置:
- 修改
requirepass 123456配置,设置密码。 - 修改
bind 0.0.0.0配置,允许所有网卡地址连接。 - 修改操作系统的防火墙规则,允许6379端口连接。
1.5 端口
默认端口是6379。
默认配置:
1 | port 6379 |
1.6 数据库数量
默认数据库数量是16个,本意是为了数据隔离,但无法做到物理隔离,实际使用一般只用0号数据库。
默认配置:
1 | databases 16 |
默认使用0号数据库。
1.7 数据目录
默认数据目录使用安装目录,建议指定数据目录,需要手动创建。
修改数据目录:
1 | dir ./data |
2 基本操作
2.1 连接
2.1.1 建立连接
语法:
1 | redis-cli -c -h host -p port -a password --raw |
说明:
-c:通过集群模式连接。-h host:指定连接的IP地址。-p port:指定连接的端口号。-a password:指定连接的密码。--raw:按原始编码输出数据,避免中文被转义为十六进制显示。
本地连接:
1 | redis-cli |
远程连接:
1 | redis-cli -h 127.0.0.1 -p 6379 -a 123456 |
2.1.2 关闭连接
语法:
1 | exit |
2.2 数据库
2.2.1 切换
默认使用0号数据库,最大为15号数据库。
语法:
1 | SELECT db |
示例:
1 | SELECT 0 |
2.2.2 统计
语法:
1 | DBSIZE |
2.2.3 清空
清空当前数据库:
1 | FLUSHDB |
清空全部数据库:
1 | FLUSHALL |
2.4 键
Redis使用键来唯一标识数据,通过键能够操作对应的值。
常用命令:
KEYS pattern:查找匹配模式的键,使用*表示任意字符,生产环境可能会阻塞。EXISTS key:检查键是否存在。TYPE key:查看键的数据类型。DEL key:删除键。RENAME key newkey:重命名键,会覆盖已存在的新键。MOVE key db:将键移动到指定数据库。EXPIRE key seconds:设置键的过期时间,单位是秒。设置为0表示永不过期,设置为负数表示立即过期,等同于删除键。TTL key:查看键的剩余过期时间,单位是秒。返回-1表示永不过期,返回-2表示键不存在,返回剩余的秒数表示过期时间。PERSIST key:移除键的过期时间,设置为永不过期。
3 数据类型
3.1 String
最基本的数据类型,可以存储字符串,也可以存储数字。
使用场景:
- 缓存:缓存热点数据,减少数据库压力。
- 会话:存储用户会话信息,支持分布式会话。
- 计数器:使用INCR命令实现计数器。
- 分布式锁:使用SET命令的NX选项实现分布式锁。
常用命令:
GET key:获取值。SET key value:设置键值对。SET key value NX:设置键值对,如果键不存在才设置。SET key value EX seconds:设置键值对并设置过期时间,单位是秒。SET key value NX EX seconds:设置键值对并设置过期时间,单位是毫秒。如果键不存在才设置。SETNX key value:设置键值对,如果键不存在才设置。SETEX key seconds value:设置键值对并设置过期时间,单位是秒。MGET key ... key:获取多个值,按顺序返回列表。MSET key value ... key value:设置多个键值对。INCR key:自增并返回新值,整数有效,其他报错。DECR key:自减并返回新值,整数有效,其他报错。STRLEN key:获取字符串值的长度。
3.2 Hash
键值对集合,存储键值对集合,每个键值对都由Field和Value组成。
使用场景:
- 存储对象:使用HSET命令存储对象的属性和值。
常用命令:
HGET key field:获取字段值。HSET key field value:设置字段键值对。HSETNX key field value:设置字段键值对,如果字段不存在才设置。HMGET key field ... field:获取多个字段值。HMSET key field value ... field value:设置多个字段键值对。HKEYS key:获取所有字段名。HVALS key:获取所有字段值。HINCRBY key field increment:增加字段值。HEXISTS key field:检查字段名是否存在,返回1表示存在,返回0表示不存在。HDEL key field ... field:删除字段键值对。HLEN key:获取键值对数量。
3.3 List
可重复的有序双向链表,支持存储类型不同的元素。
使用场景:
- 任务队列:使用LPUSH命令将任务插入到队列的左侧,使用RPOP命令从队列的右侧弹出任务。
常用命令:
LINDEX key index:通过索引获取列表元素。LPUSH key element ... element:从列表左侧插入元素,最后的元素索引为0。RPUSH key element ... element:从列表右侧插入元素,最后的元素索引为列表长度减1。LPOP key:从列表左侧弹出元素。RPOP key:从列表右侧弹出元素。LREM key count element:删除列表中指定值的元素,支持设置删除数量。LSET key index element:设置列表中指定索引的元素值,列表必须存在。LINSERT key BEFORE pivot element:在指定值之前插入新元素。LINSERT key AFTER pivot element:在指定值之后插入新元素。LTRIM key start stop:裁剪列表,保留指定范围的元素。LRANGE key start stop:通过索引范围获取列表元素。LLEN key:获取列表长度。
3.4 Set
自动去重的无序集合,支持交并差运算。
使用场景:
- 去重:使用SADD命令存储唯一的元素,自动去重。
- 抽奖:使用SRANDMEMBER命令随机获取集合中的元素。
常用命令:
SMEMBERS key:获取集合所有元素。SRANDMEMBER key count:随机获取集合中的元素,支持设置获取数量。SADD key member ... member:添加多个元素。SREM key member ... member:删除多个元素。SINTER key ... key:获取集合交集,返回所有集合都存在的元素。SINTERSTORE destination key ... key:获取集合交集并存储到新集合。SUNION key ... key:获取集合并集,返回所有集合中的元素。SUNIONSTORE destination key ... key:获取集合并集并存储到新集合。SDIFF key ... key:获取集合差集,返回首个集合存在但是其他集合不存在的元素。SDIFFSTORE destination key ... key:获取集合差集并存储到新集合。SISMEMBER key member:检查元素是否在集合中,返回1表示存在,返回0表示不存在。SCARD key:获取集合元素数量。
3.5 ZSet
自动去重的有序集合,根据分数排序。
使用场景:
- 排行榜:使用ZRANGE命令根据分数对排行榜排序。
常用命令:
ZADD key score member ... score member:添加多个元素。ZADD key NX score member ... score member:添加多个元素,如果元素不存在才添加。ZREM key member ... member:删除多个元素。ZRANGE key start stop WITHSCORES:获取有序集合元素,按分数从小到大。ZREVRANGE key start stop WITHSCORES:获取有序集合元素,按分数从大到小。ZSCORE key member:获取元素的分数。ZINCRBY key increment value:增加元素的分数。ZCARD key:获取集合元素数量。ZCOUNT key min max:获取分数在指定范围内的元素数量。
3.6 HyperLogLog
概率型数据结构,用于统计去重后的元素数量,即统计基数。在大数据量的基数统计场景中,能以极其节省内存的方式提供较高精度的估算值。
使用场景:
- 访问统计:使用PFCOUNT命令获取去重后的元素数量。
常用命令:
PFADD key element ... element:添加多个元素,插入成功返回1,插入失败返回0。PFFCOUNT key ... key:获取集合的基数,如果是多个集合,返回并集的基数。PFMERGE destkey sourcekey ... sourcekey:合并多个集合。
3.7 Geo
地理位置数据结构,支持高效的地理距离计算,底层使用ZSet数据结构,使用Haversine公式计算距离。
使用场景:
- 附近位置:使用GEOSEARCH命令查询指定半径内的位置。
- 距离计算:使用GEODIST命令计算两个位置之间的距离。
常用命令:
GEOPOS key member ... member:获取多个元素的经度和纬度。GEOHASH key member ... member:获取多个元素的GEOHASH值,长度11位字符串。GEOADD key longitude latitude member ... longitude latitude member:添加多个元素。GEOADD key NX longitude latitude member ... longitude latitude member:添加多个元素,如果元素不存在才添加。ZREM key member ... member:删除多个元素。GEODIST key member1 member2 [M|KM|FT|MI]:计算两个元素之间的距离,默认单位是米。GEOSEARCH key 位置类型 范围类型 可选参数:查询指定位置在指定范围内的元素,新版范围命令。GEOSEARCHSTORE destkey sourcekey 位置类型 范围类型 可选参数 [STOREDIST]:查询指定位置在指定范围内的元素并存储到新的ZSet集合,支持将返回距离作为分数存储,新版范围命令。GEORADIUS key longitude latitude radius M|KM|FT|MI:查询指定位置在指定半径内的元素,旧版范围命令,已废弃,不建议使用。GEORADIUSBYMEMBER key member radius M|KM|FT|MI:查询指定元素在指定半径内的元素,旧版范围命令,已废弃,不建议使用。
位置类型:
FROMMEMBER member:从指定元素开始查询。FROMLONLAT longitude latitude:从指定经度和纬度开始查询。
范围类型:
BYRADIUS radius M|KM|FT|MI:根据半径查询元素。BYBOX width height M|KM|FT|MI:根据矩形框查询元素。
可选参数:
ASC|DESC:返回元素的排序顺序,使用ASC按距离从近到远排序,使用DESC按距离从远到近排序。COUNT count [ANY]:返回元素数量,不使用ANY会排序并返回最近的,使用ANY不会排序速度较快。WITHCOORD:返回元素的经度和纬度。WITHDIST:返回元素到查询位置的距离。WITHHASH:返回元素的HASH值,长度16为的整数,对应52个二进制位,对应11位字符串的GEOHASH值。
3.8 Bitmap
对String类型的扩展,用于将字符串当做二进制位数组处理。
使用场景:
- 在线统计:使用BITCOUNT命令统计指定范围内的位值为1的个数,实现在线统计。
常用命令:
GETBIT key offset:获取指定偏移量上的位值。SETBIT key offset value:设置指定偏移量上的位值。BITCOUNT key start end:统计指定范围内的位值为1的个数。BITPOS key value:获取指定位值的最低位偏移量。
3.9 Bitfield
对String类型的扩展,用于将字符串当做任意宽度组成的数组处理。
使用Bitmap只能操作数组上单个的数据,使用Bitfield可以操作数组上任意宽度的数据。
使用场景:
- 紧凑存储:使用BITFIELD将多个数据存储在一个字符串中,每个数据占用的内存更少。
常用命令:
BITFIELD key 核心操作:获取指定偏移量上的数据。BITFIELD_RO key offset value:设置指定偏移量上的数据。
核心操作,支持组合使用:
GET encoding offset:获取指定类型编码的指定偏移量上的数据。SET encoding offset value:设置指定类型编码的指定偏移量上的数据。INCRBY encoding offset increment:增加指定类型编码的指定偏移量上的数据。OVERFLOW 溢出处理:指定溢出处理方式,只对以后的操作生效。
类型编码使用前缀+位数表示,前缀有两种:
u:表示无符号整数,使用u8表示8位无符号整数,最高64位。i:表示有符号整数,使用i8表示8位有符号整数,最高63位。
偏移量:
数字:指定偏移量,可以存储不同位数的数据,使用SET u2 0 3 SET u5 2 9表示从第0为开始存储2位的3和5位的9。前缀:指定编号,只能存储相同位数的数据,根据位数和编号乘积计算偏移量,使用SET u3 #4 6 SET u3 #5 7表示从第12位开始存储3位的6和3位的7。
溢出处理:
WRAP:循环处理,超出范围的值会循环到范围内,不做任何处理,默认方式。SAT:饱和处理,超出范围的值会取饱和值,向上溢出取最大值,向下溢出取最小值。FAIL:失败处理,超出范围的值会返回错误。
3.10 Stream
日志型数据结构,支持存储多个元素,每个元素都有唯一的标识ID。
使用场景:
- 消息队列:使用XREADGROUP读取消息,使用XACK确认消息。
常用命令:
XADD key 可选限制 id|* field value ... field value:添加多个元素,返回添加的元素ID,支持指定ID,也支持使用*自动生成ID。XLEN key:获取元素数量。XDEL key id ... id:删除指定元素。XTRIM key 可选限制:删除多个元素。XREAD [COUNT count] STREAMS key ... key id ... id:获取指定数量的元素,默认获取全部元素。XRANGE key start end [COUNT count]:获取指定ID范围内的元素,从旧到新。XREVRANGE key end start [COUNT count]:获取指定ID范围内的元素,从新到旧。XGROUP 分组命令:管理消费者组。XREADGROUP GROUP group consumer [COUNT count] [NOACK] STREAMS key ... key id ... id:从消费者组中读取元素,读取指定ID之后的元素,使用>读取未分发的元素,支持自动确认(不可靠)。XACK key group id ... id:确认多个元素。XPENDING key group [start end count [consumer]]:获取未确认元素,支持指定条件。
可选限制:
MAXLEN [=|~] threshold:指定最大元素数量,使用=表示精确数量(性能差),使用~表示近似数量(性能好)。MINID [=|~] threshold:指定最小元素ID,使用=表示精确ID(性能差),使用~表示近似ID(性能好)。
分组命令:
CREATE key group id|$:创建分组,指定起始位置,0表示从头消费,$表示消费最新消息。CREATECONSUMER key group consumer:创建消费者。DELCONSUMER key group consumer:删除消费者。DESTROY key group:销毁分组。SETID key group id|$:设置分组的ID。HELP:获取分组命令的帮助信息。
条