Redis数据结构命令
目录
- 一、开启Redis命令行客户端:
- 二、Redis数据结构命令:
- 1.通用命令:
- 2.基本数据类型:
- 2.1.String
- 2.2.Hash
- 2.3.List
- 2.4.Set
- 2.5.SortedSet
- 3.特殊数据类型:
- 3.1.GEO
- 3.2.BitMap
- 3.3.HyperLog
一、开启Redis命令行客户端:
redis-cli [-h -p -a]
-hredis结点ip地址,默认127.0.0.1-predis结点端口,默认6379-aredis密码
二、Redis数据结构命令:
redis是字符型数据库,key是String类型,value类型多种多样。
1.通用命令:
通用命令对所有数据类型均适用。
- 根据表达式查询key值:
KEYS 表达式官方说明
该命令底层是模糊查询,耗时长,不建议在生产环境设备上使用。 - 删除key:
DEL k1 k2 ... kn官方说明 - 判断key是否存在:
EXISTS k1 k2 ... kn官方说明 - 给key设置有效期,到期时key会被自动删除:
EXPIRE key seconds [NX | XX | GT | LT]官方说明NX– 仅当键不存在过期时间时,才设置过期时间XX– 仅当键已存在过期时间时,才设置过期时间GT– 仅当新过期时间大于当前过期时间时,才设置过期时间LT– 仅当新过期时间小于当前过期时间时,才设置过期时间
- 查看key剩余有效期:
TTL key官方说明
返回值:-1表示永久有效,-2表示失效
2.基本数据类型:
2.1.String

String类型根据字符串格式不同,可以分为三类:
- string
- int,可以做自增、自减操作
- float,可以做自增、自减操作
不管是哪种格式,底层都是以字节数组形式存储,最大不会超过512MB。
SET key value:新建String类型键值对或更新已经存在的String类型键值对 官方说明GET key:根据key查询value 官方说明MSET k1 v1 k2 v2 ... kn vn:批量添加或更新 官方说明MGET k1 k2 ... kn: 批量查询 官方说明INCR key:让一个整型的value自增1 官方说明INCRBY key num:让一个整型的value自增num 官方说明
num可以为负数是自减INCRBYFLOAT key num:让一个浮点类型的value自增num 官方说明SETNX key value:添加一个String类型的键值对,前提是key不存在,为了防止SET误修改 官方说明SETEX key value seconds:添加一个String类型键值对并指定有效期seconds 官方说明
当value是JSON结构的字符串时时,String类型会自动将字符串按结构拆分出不同的value:
set product:huawei ‘{“id”:1, “name”:“华为”}’
- product:huawei 是id
- ‘{“id”:1, “name”:“华为”}’ 是value字符串
2.2.Hash
Hash类型的Value是一个无序字典。
- 无序
- 查找快
- 元素不可重复(field唯一性)

下述指令就是在String指令的基础上加了H:
HSET key field value:新建HASH类型键值对或更新已经存在的HASH类型键值对 官方说明HGET key field:根据key field查询value 官方说明HMSET k1 f1 v1 k2 f1 v1 ... k2 fn vn:批量添加或更新 官方说明HMGET k1 v1 k2 v1 ... kn v2: 批量查询 官方说明HGETALL key:查询key的所有field-value对 官方说明HKEYS key:查询key的所有field 官方说明HVALS key:查询key的所有value(不包含key) 官方说明HINCRBY key field num:让一个HASH类型的value自增num 官方说明HSETNX key field value:添加一个HASH类型的键值对,前提是field不存在,为了防止SET误修改 官方说明
2.3.List

List是一个双向链表结构,既支持正向检索也支持反向检索。
- 有序
- 插入和删除速度快(链表)
- 查询速度较传统数组慢(链表查询需要遍历)
- 元素可以重复
用于保存对顺序有要求的数据。
LPUSH key value1 value2 .... valuen:向链表左侧插入多个元素LPOP key:移除并返回链表左侧第一个元素,没有则返回nilRPUSH key value1 value2 .... valuen:向链表右侧插入多个元素RPOP key:移除并返回链表右侧第一个元素,没有则返回nilLRANGE key start end:返回下标start~end内所有元素BLPOP、BRPOP key second: 除并返回链表左/右侧第一个元素,没有则等待指定秒数(阻塞)
2.4.Set
set也是一个hash表,区别于Hash的是Set不需要额外的field来操作value,可以直接对value进行操作。
- 无序
- 查找快
- 元素不可重复(value唯一性)
- 支持交交集、并集、差集等功能
相关命令:
SADD key value1 value2 .... valuen:插入多个元素SREM key value1 value2 .... valuen:移除指定元素SCARD key:返回set中元素的个数SISMEMBER key value:判断value元素是否存在于set中SMEMBERS key:获取set中的所有元素SINTER key1 key2 ... keyn:求set之间的交集SUNION key1 key2 ... keyn:求set之间的并集SDIFF key1 key2 ... keyn:求set之间的差集
2.5.SortedSet
Redis中的SortedSet是一个可排序的set集合,底层实现是一个SkipList加Hash表:
- 可排序(需要额外的score变量)
- 元素不可重复
- 查询速度快
常用于实现排行榜功能。
常见指令(以下命令默认排名升序,降序则需要在命令的Z后添加REV):
ZADD key score value:添加一个或多个元素到sorted set,如果已经存在则更新其score值。ZREM key value:删除指定元素。ZSCORE key value:获取指定元素的score值。ZRANK key value:获取指定元素在sorted set中的排名。ZCARD key:获取sorted set中的元素个数。ZCOUNT key min max:获取sorted set中score在min~max的元素个数。ZRANGE key rank1 rank2:获取排序后排名在rank1~rank2的元素。ZRANGEBYSCORE key min max:获取score在min~max的元素。ZINCRBY key num value:修改指定元素的分数为score+num。ZINTER key1 key2 ... keyn:求sortedset之间的交集ZUNION key1 key2 ... keyn:求sortedset之间的并集ZDIFF key1 key2 ... keyn:求sortedset之间的差集
