Redis基础之常用命令说明(二)
Redis 是 Key-Value 类型缓存型数据库,Redis 为了存储不同类型的数据,提供了五种常用数据类型,如下所示:
- string(字符串)
- hash(哈希散列)
- list(列表)
- set(集合)
- zset(sorted set:有序集合)
外加3中扩展的数据类型(内部有上面几种构成)
- Geospatial 地理位置
- Hyperloglog 基数统计
- Bitmap 位图
支持:push/pop、add/remove 、取交集、并集、差集、排序。
select num #选择库,默认在0库,共16个库 auth liweijie #授权用户所需密码(密码就是redis.conf中配置的密码) flushdb #清空数据库。
move key db #把某个key移动到指定数据库
expire key 5 #把某key过期时间设置5秒 或 set key python EX 10
ttl key #查看某key过期时间
exists key #查看某key是否存在
type key #查看类型
rename key newkey #修改key名
Redis字符串命令
1) 命令格式
Redis 提供了操作字符串的命令,通过学习这些命令我们可以掌握如何使用它们,其语法格式如下:
redis 127.0.0.1:6379> COMMAND KEY_NAME # COMMAND:表示字符串的命令; # KEY_NAME:表示 key(键)的名称。
在练习命令的过程中,大家要善于利用 Redis 客户端给出的自动语法提示,比如SET
命令的格式如下:
127.0.0.1:6379> SET key value [EX seconds|PX milliseconds] [NX|XX] #其中[]内代表可选参数,其含义如下所示: #EX seconds:设置指定的过期时间,以秒为单位; #PX milliseconds:设置指定的过期时间,以毫秒为单位; #NX:先判断 key 是否存在,如果 key 不存在,则设置 key 与 value; #XX:先判断 key 是否存在,如果 key 存在,则重新设置 value。
redis 127.0.0.1:6379> SET key1 "abcd" EX 60 NX
2) 常用命令
命令 | 说明 |
---|---|
SET key value | 用于设定指定键的值。 |
GET key | 用于检索指定键的值。 |
GETRANGE key start end | 返回 key 中字符串值的子字符。 |
GETSET key value | 将给定 key 的值设置为 value,并返回 key 的旧值。 |
GETBIT key offset | 对 key 所存储的字符串值,获取其指定偏移量上的位(bit)。 |
MGET key1 [key2..] | 批量获取一个或多个 key 所存储的值,减少网络耗时开销。 |
SETBIT key offset value | 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。 |
SETEX key seconds value | 将值 value 存储到 key中 ,并将 key 的过期时间设为 seconds (以秒为单位)。 |
SETNX key value | 当 key 不存在时设置 key 的值。 |
SETRANGE key offset value | 从偏移量 offset 开始,使用指定的 value 覆盖的 key 所存储的部分字符串值。 |
STRLEN key | 返回 key 所储存的字符串值的长度。 |
MSET key value [key value ...] | 该命令允许同时设置多个键值对。 |
MSETNX key value [key value ...] | 当指定的 key 都不存在时,用于设置多个键值对。 |
PSETEX key milliseconds value | 此命令用于设置 key 的值和有过期时间(以毫秒为单位)。 |
INCR key | 将 key 所存储的整数值加 1。 |
INCRBY key increment | 将 key 所储存的值加上给定的递增值(increment)。 |
INCRBYFLOAT key increment | 将 key 所储存的值加上指定的浮点递增值(increment)。 |
DECR key | 将 key 所存储的整数值减 1。 |
DECRBY key decrement | 将 key 所储存的值减去给定的递减值(decrement)。 |
APPEND key value | 该命令将 value 追加到 key 所存储值的末尾。 |
Redis string 的SET/GET
命令只能一次设置/查询一个键值对,这样虽然简单,但是效率不高。为了提高命令的执行效率,Redis 提供了可以批量操作多个字符串的读写命令 MSET/MGET(“M”代表“Many”),它们允许一次性设置或查询多个键值对,这样就减少了网络耗时。
Redis list列表
数据结构为链表的结构.
1) 在头部插入数据
LPUSH key value [value ...]
2) 在尾部插入数据
RPUSH key value [value ...]
3) 在一个元素的前|后插入新元素
LINSERT key BEFORE|AFTER pivot value
4) 设置指定索引的元素值
LSET key index value
LPOP key
RPOP key
LRANGE key start stop
LTRIM key start stop
LLEN key
LINDEX key index
Redis hash哈希
Redis hash(哈希散列)是由字符类型的 field(字段)和 value 组成的哈希映射表结构(也称散列表),它非常类似于表格结构。在 hash 类型中,field 与 value 一一对应,且不允许重复,是无序的。
hash 类型是 Redis 常用数据类型之一,其底层存储结构有两种实现方式( ziplist和dict字典结构);
哈希键和值的字符串长度总和小于 64 个字节,并且键值对数量要小于 512 个时用zpilist存储,其余情况就用 dict(字典结构)存储.
常用命令
命令 | 说明 |
---|---|
HDEL key field2 [field2] | 用于删除一个或多个哈希表字段。 |
HEXISTS key field | 用于确定哈希表字段是否存在。 |
HGET key field | 获取 key 关联的哈希字段的值。 |
HGETALL key | 获取 key 关联的所有哈希字段值。 |
HINCRBY key field increment | 给 key 关联的哈希字段做整数增量运算 。 |
HINCRBYFLOAT key field increment | 给 key 关联的哈希字段做浮点数增量运算 。 |
HKEYS key | 获取 key 关联的所有字段和值。 |
HLEN key | 获取 key 中的哈希表的字段数量。 |
HMSET key field1 value1 [field2 value2 ] | 在哈希表中同时设置多个 field-value(字段-值) |
HMGET key field1 [field2] | 用于同时获取多个给定哈希字段(field)对应的值。 |
HSET key field value | 用于设置指定 key 的哈希表字段和值(field/value)。 |
HSETNX key field value | 仅当字段 field 不存在时,设置哈希表字段的值。 |
HVALS key | 用于获取哈希表中的所有值。 |
HSCAN key cursor | 迭代哈希表中的所有键值对,cursor 表示游标,默认为 0。 |
Redis set集合
Redis set (集合)遵循无序排列的规则,集合中的每一个成员(也就是元素,叫法不同而已)都是字符串类型,并且不可重复。Redis set 是通过哈希映射表实现的.
set采用两种数据格式: intset(整型数组)与 hash table(哈希)
set集合都是int,并且集合个数小于512个,用intset存,其余情况使用哈希表存储。
常用命令
命令 | 说明 |
---|---|
SADD key member1 [member2] | 向集合中添加一个或者多个元素,并且自动去重。 |
SCARD key | 返回集合中元素的个数。 |
SDIFF key1 [key2] | 求两个或多个集合的差集。 |
SDIFFSTORE destination key1 [key2] | 求两个集合或多个集合的差集,并将结果保存到指定的集合中。 |
SINTER key1 [key2] | 求两个或多个集合的交集。 |
SINTERSTORE destination key1 [key2] | 求两个或多个集合的交集,并将结果保存到指定的集合中。 |
SISMEMBER key member | 查看指定元素是否存在于集合中。 |
SMEMBERS key | 查看集合中所有元素。 |
SMOVE source destination member | 将集合中的元素移动到指定的集合中。 |
SPOP key [count] | 弹出指定数量的元素。 |
SRANDMEMBER key [count] | 随机从集合中返回指定数量的元素,默认返回 1个。 |
SREM key member1 [member2] | 删除一个或者多个元素,若元素不存在则自动忽略。 |
SUNION key1 [key2] | 求两个或者多个集合的并集。 |
SUNIONSTORE destination key1 [key2] | 求两个或者多个集合的并集,并将结果保存到指定的集合中。 |
SSCAN key cursor [match pattern] [count count] | 该命令用来迭代的集合中的元素。 |
Redis zset有序集合
Redis zset(有序集合)中的成员是有序排列的,有序集合中每个成员都会关联一个 double类型的 score (分数值),Redis 正是通过 score 实现了对集合成员的排序。
常用命令
命令 | 说明 |
---|---|
ZADD key score1 member1 [score2 member2] | 用于将一个或多个成员添加到有序集合中,或者更新已存在成员的 score 值 |
ZCARD key | 获取有序集合中成员的数量 |
ZCOUNT key min max | 用于统计有序集合中指定 score 值范围内的元素个数。 |
ZINCRBY key increment member | 用于增加有序集合中成员的分值。 |
ZINTERSTORE destination numkeys key [key ...] | 求两个或者多个有序集合的交集,并将所得结果存储在新的 key 中。 |
ZLEXCOUNT key min max | 当成员分数相同时,计算有序集合中在指定词典范围内的成员的数量。 |
ZRANGE key start stop [WITHSCORES] | 返回有序集合中指定索引区间内的成员数量。 |
ZRANGEBYLEX key min max [LIMIT offset count] | 返回有序集中指定字典区间内的成员数量。 |
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] | 返回有序集合中指定分数区间内的成员。 |
ZRANK key member | 返回有序集合中指定成员的排名。 |
ZREM key member [member ...] | 移除有序集合中的一个或多个成员。 |
ZREMRANGEBYLEX key min max | 移除有序集合中指定字典区间的所有成员。 |
ZREMRANGEBYRANK key start stop | 移除有序集合中指定排名区间内的所有成员。 |
ZREMRANGEBYSCORE key min max | 移除有序集合中指定分数区间内的所有成员。 |
ZREVRANGE key start stop [WITHSCORES] | 返回有序集中指定区间内的成员,通过索引,分数从高到低。 |
ZREVRANGEBYSCORE key max min [WITHSCORES] | 返回有序集中指定分数区间内的成员,分数从高到低排序。 |
ZREVRANK key member | 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序。 |
ZSCORE key member | 返回有序集中,指定成员的分数值。 |
ZUNIONSTORE destination numkeys key [key ...] | 求两个或多个有序集合的并集,并将返回结果存储在新的 key 中。 |
ZSCAN key cursor [MATCH pattern] [COUNT count] | 迭代有序集合中的元素(包括元素成员和元素分值)。 |
Geospatial 地理位置
存储地理位置信息的功能,即 GEO(英文全称 geographic),它的底层通过 Redis 有序集合(zset)实现。不过 Redis GEO 并没有与 zset 共用一套的命令,而是拥有自己的一套命令。
按规定,导入正确的坐标(坐标系要统一),可以用此功能,计算两点直线距离,某点范围内的所有元素,指定坐标点周围的元素等(应用场景:附近的人,打车位置)
常用命令
命令 | 说明 |
---|---|
GEOADD | 将指定的地理空间位置(纬度、经度、名称)添加到指定的 key 中。 |
GEOPOS | 从 key 里返回所有给定位置元素的位置(即经度和纬度) |
GEODIST | 返回两个地理位置间的距离,如果两个位置之间的其中一个不存在, 那么命令返回空值。 |
GEORADIUS | 根据给定地理位置坐标(经纬度)获取指定范围内的地理位置集合。 |
GEORADIUSBYMEMBER | 根据给定地理位置(具体的位置元素)获取指定范围内的地理位置集合。 |
GEOHASH | 获取一个或者多个的地理位置的 GEOHASH 值。 |
ZREM | 通过有序集合的 zrem 命令实现对地理位置信息的删除。 |
例子
1.GEOADD 将指定的地理空间位置(纬度、经度、名称)添加到指定的 key 中。
GEOADD key longitude latitude member [longitude latitude member ...] longitude:位置地点所处的经度; latitude:位置地点所处的纬度; member:位置名称。 #geoadd china:city 116.40 39.90 beijing 121.47 31.23 shanghai
2.GEODIST 该命令用于获取两个地理位置间的距离。返回值为双精度浮点数
GEODIST key member1 member2 [unit]
参数 unit 是表示距离单位,取值如下所示:
m 表示单位为米;
km 表示单位为千米;
mi 表示单位为英里;
ft 表示单位为英尺。
#geodist city beijing shanghai km
3.GEORADIUS 以给定的经纬度为中心,计算出 key 包含的地理位置元素与中心的距离不超过给定最大距离的所有位置元素
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] 参数说明: WITHDIST :在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 WITHCOORD :返回位置元素的经度和维度。 WITHHASH :采用 GEOHASH 对位置元素进行编码,以 52 位有符号整数的形式返回有序集合的分值,该选项主要用于底层调试,实际作用不大。 COUNT:指定返回位置元素的数量,在数据量非常大时,可以使用此参数限制元素的返回数量,从而加快计算速度。 #以首都的坐标为中心,计算各个城市距离首都的距离,最大范围设置为150km #同时返回距离,与位置元素的经纬度 127.0.0.1:6379> georadius city 116.41 39.91 150 km withcoord withdist 注意:该命令默认返回的是未排序的位置元素。通过 ASC 与 DESC 可让返回的位置元素以升序或者降序方式排列。
4.GEORADIUSBYMEMBER 根据给定的地理位置坐标(即经纬度)获取指定范围内的位置元素集合
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DES]
m :米,默认单位;
km :千米(可选);
mi :英里(可选);
ft :英尺(可选);
ASC:根据距离将查找结果从近到远排序;
DESC:根据距离将查找结果从远到近排序。
#以贵阳为中心,最大距离不超过900km 127.0.0.1:6379> georadiusbymember city guiyang 900 km withcoord withdist
5.ZREM 用于删除指定的地理位置元素
127.0.0.1:6379> zrem city beijing shanghai
HyperLoglog基数统计
基数:集合元素个数,集合元素不重复.
HyperLoglog 是 Redis 重要的数据类型之一,它非常适用于海量数据的计算、统计,其特点是占用空间小,计算速度快。
HyperLoglog 采用了一种基数估计算法,因此,最终得到的结果会存在一定范围的误差(标准误差为 0.81%)。每个 HyperLogLog key 只占用 12 KB 内存,所以理论上可以存储大约2^64
个值,而 set(集合)则是元素越多占用的内存就越多,两者形成了鲜明的对比 。
常用命令
命令 | 说明 |
---|---|
PFADD key element [element ...] | 添加指定元素到 HyperLogLog key 中。 |
PFCOUNT key [key ...] | 返回指定 HyperLogLog key 的基数估算值。 |
PFMERGE destkey sourcekey [sourcekey ...] | 将多个 HyperLogLog key 合并为一个 key。 |
例子
#向指定的key中添加用户 127.0.0.1:6379> pfadd user:uv:2022011309 user04 user05 #统计基数值 127.0.0.1:6379> pfcount user:uv:2022011309 #统计两个key的基数值 127.0.0.1:6379> pfcount user:uv:2022011309 user:uv:2022011310 #将两个key值合并为一个 127.0.0.1:6379> pfmerge user:uv:2022011309 user:uv:2022011310
bitmap位图操作
位存储,统计用户信息活跃,登录状态,打卡状态,都可使用.
位图本质上是一个字节串,也就是 bytes 数组。您可以使用getbit/setbit
命令来处理这个位数组
常用命令
命令 | 说明 |
---|---|
SETBIT key offset value | 设置或者清除某一位上的值。offset为偏移量 |
GETBIT key [offset] | 获取某一位上的值。 |
BITCOUNT key [start end] | 统计指定位区间上,值为 1 的个数 |
http://c.biancheng.net/redis/lists.html
http://c.biancheng.net/redis/sets.html
http://c.biancheng.net/redis/hashes.html
http://c.biancheng.net/redis/geo.html
https://www.cnblogs.com/djcoder/p/12293030.html
在线练习工具:https://try.redis.io/
查看更多命令:https://redis.io/commands
http://redis.cn/commands.html
http://redisdoc.com/geo/index.html