抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

摘要:本文学习了Redis的基本使用方法,包括简单配置和基本操作。

环境

Windows 10 企业版 LTSC 21H2
Redis 7.4.8

1 简单配置

默认使用安装目录下的redis.conf文件作为配置文件。

1.1 密码

作为使用在内存缓存层面的数据库,默认信任本地网络环境,所以默认没有密码。

在6.0版本以后,支持设置密码,并且支持通过ACL设置多用户不同权限,使用ACL会导致密码失效。

示例:

redis.conf
1
requirepass 123456

1.2 绑定地址

默认绑定127.0.0.1,只允许本地连接,如果设置为0.0.0.0,将允许所有网卡地址连接。

修改绑定地址:

redis.conf
1
bind 0.0.0.0

1.3 安全模式

默认情况下使用安全模式,在安全模式下,如果没有设置密码,只能从本地连接。

禁用安全模式:

redis.conf
1
protected-mode no

1.4 远程访问

如果需要支持远程访问,需要修改以下配置:

  1. 修改requirepass 123456配置,设置密码。
  2. 修改bind 0.0.0.0配置,允许所有网卡地址连接。
  3. 修改操作系统的防火墙规则,允许6379端口连接。

1.5 端口

默认端口是6379。

默认配置:

redis.conf
1
port 6379

1.6 数据库数量

默认数据库数量是16个,本意是为了数据隔离,但无法做到物理隔离,实际使用一般只用0号数据库。

默认配置:

redis.conf
1
databases 16

默认使用0号数据库。

1.7 数据目录

默认数据目录使用安装目录,建议指定数据目录,需要手动创建。

修改数据目录:

redis.conf
1
dir ./data

2 基本操作

2.1 连接

2.1.1 建立连接

语法:

cmd
1
redis-cli -c -h host -p port -a password --raw

说明:

  • -c:通过集群模式连接。
  • -h host:指定连接的IP地址。
  • -p port:指定连接的端口号。
  • -a password:指定连接的密码。
  • --raw:按原始编码输出数据,避免中文被转义为十六进制显示。

本地连接:

cmd
1
redis-cli

远程连接:

cmd
1
redis-cli -h 127.0.0.1 -p 6379 -a 123456

2.1.2 关闭连接

语法:

cmd
1
exit

2.2 数据库

2.2.1 切换

默认使用0号数据库,最大为15号数据库。

语法:

cmd
1
SELECT db

示例:

cmd
1
SELECT 0

2.2.2 统计

语法:

cmd
1
DBSIZE

2.2.3 清空

清空当前数据库:

cmd
1
FLUSHDB

清空全部数据库:

cmd
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:获取分组命令的帮助信息。

评论