Redis数据结以及常见命令
Redis 是一个高性能的键值存储系统,支持多种数据结构。每种数据结构都有其特定的用途和操作命令tring
类型 | 介绍 | 常用命令 | 应用场景 |
String | 最基本的数据类型,可以存储字符串、整数或浮点数,示例:hello word |
-
SET K V:设置键值对。 -
GET K:获取键对应的值。 -
MSET k1 v1 k2 v2 k3 v3···:批量添加多个string类型的键值对 -
MGET k1 k2 k3 ····:根据多个key获取多个string类型的value -
INCR K:让一个整型的K的值自增1 -
INCRBY K num:让一个整型的K的值增长num,num也可以是负数 -
INCRBYFLOAT k num:让一个k(value是浮点类型)的数字自增指定步长(可以是浮点数) -
APPEND KEY VALUE :将值追加到键的现有值末尾。 -
SETNX K VALUE:添加一个string类型的键值对,前提是该键不存在,否则不执行,相当SET K V NX -
SETEX:添加一个string类型的键值对,并制定有效期,相当SET K V EX | 缓存、计数器、分布式锁。 |
List | 一个有序的字符串列表,支持在头部或尾部插入和删除元素。示例:[A->B->C->C],可以看作一个双向列表 |
-
Lpush key element····在列表头部插入一个元素。 -
Rpush key value:在列表尾部插入一个元素。 -
LPOP KEY:移除并返回列表头部的元素。 -
RPOP KEY:移除并返回列表尾部的元素。 -
lrange ket star end获取列表中指定范围的元素。 -
BLPOP KEY TIME和BRPOP KEY TIME:和lpop和rpop类似,只不过在没有元素时等待指定时间,而不是直接返回null | 消息队列、最新消息列表、任务队列。 |
Set(集合) | 一个无序的字符串集合,元素唯一,不允许重复。示例:[A->B->C->C],有点像hashset |
-
SADD KEY member···:向集合中添加元素。 -
SREM KEY member····:从集合中移除元素。 -
smembers:获取集合中的所有元素。 -
sismembe key member:检查元素是否在集合中。 -
scard key:返回set中的元素个数 -
simter key1 key2···:获取多个集合的交集。 -
sdiff key1 key2···:求差集(1有,2没有) -
sunion key1 key2 ···:求并集 | 标签系统、好友关系、唯一值存储。 |
Sorted Set(有序集合) | 与 Set 类似,但每个元素都关联一个分数(score),元素按分数排序。[A->B->C->D],有点像treeset(功能上) |
-
ZADD key score member s2 m2 ... :向有序集合中添加一个元素。 -
ZREM key member :从有序集合中移除一个元素。 -
zscore key member:获取指定元素的score值 -
zrank key member:获取指定元素排名,升序,分数从小到大,排名从0开始 -
zcard key:获取元素个数 -
zcount key min max:给定范围内所有元素的个数 -
zincarby key increment member:指定元素自增,步长为increment(可以为负) -
ZRANGE key start stop :按分数范围获取元素。 -
ZREVRANK key member :获取元素的排名(按分数降序) -
zrangebycsore key min max:按你找score排序后,获取指定score范围内的元素 -
zdiff,zinter,zunion member 1 member2···:取差集、交集、并集 | 排行榜、优先级队列、范围查询。 |
Hash(哈希) | 一个键值对集合,也称散列,其value是一个无需序字典,适合存储对象。示例:value的值可以存储成字段+值
KEY | VALUE | FILED | VALUE | SCHOOL:STUDENT:1 | NAME | XX | SCHOOL:COURSE:1 | AGE | 1 | |
-
HSET key fild value:设置哈希中的字段值。 -
HGET key field :获取哈希中指定字段的值。 -
HMSET:批量添加多个hash类型的filed值 -
HMGET:批量获取多个hash类型key的filed值 -
HGETALL:获取哈希中所有字段和值。 -
HKEYS:获取一个hash类型的key中的所有filed -
HVALS:获取一个hash类型的key中的个所有value -
HDEL KEY FILED:删除哈希中的指定字段。 -
HINCRBY KEY FILED NUM:将哈希中指定字段的值增加指定的整数。 -
HSETNX:添加一个hash类型的key的filed值,前提是这个filed不存在,否则不执行 | 存储对象(如用户信息)、字段频繁更新的场景。 |
以上是基本数据类型 | 以下是特殊数据类型 | | |
Bitmaps(位图) | 基于 String 的位操作,可以将字符串视为二进制位数组。示例:0110110101110101011 |
-
SETBIT key offset value :设置指定偏移量的位值(0 或 1)。 -
GETBIT key offset :获取指定偏移量的位值。 -
BITCOUNT key :统计值为 1 的位数。 -
BITOP operation destkey key1 key2 :对多个位图进行位操作(如 AND、OR、XOR)。 | 用户签到、活跃用户统计、布隆过滤器 |
HyperLogLog(基数统计) | 用于估计集合中唯一元素的数量,占用空间固定(12 KB) |
-
PFADD key element :向 HyperLogLog 中添加元素。 -
PFCOUNT key :估计集合中唯一元素的数量。 -
PFMERGE destkey sourcekey1 sourcekey2 :合并多个 HyperLogLog。 | 统计独立访客(UV)、大规模数据去重。 |
Geospatial(地理空间) | 存储地理位置信息(经纬度),并支持地理位置计算。示例:{A:(120.3,30.5)} |
-
GEOADD key longitude latitude member :添加地理位置。 -
GEODIST key member1 member2 :计算两个位置之间的距离。 -
GEORADIUS key longitude latitude radius unit :查找指定半径内的位置。 -
GEOPOS key member :获取指定成员的经纬度。 | 附近的人、地点搜索、距离计算。 |
Streams(流) | 用于实现消息队列,支持多消费者组和消息持久化。 |
-
XADD key ID field value :向流中添加消息。 -
XREAD COUNT num STREAMS key ID :从流中读取消息。 -
XGROUP CREATE key groupname ID :创建消费者组。 -
XREADGROUP GROUP groupname consumer COUNT num STREAMS key ID :消费者组读取消息。 | 消息队列、事件日志、实时数据处理。 |
为了便于学习redis,我们可以查看官方的帮助文档:https://redis.io/commands
还可以通过命令行查看帮助文档:help
通用命令
可以在官方文档查看:
还可以通过命令行查看,示例:help KEYS
指令 | 作用 | 备注 |
keys [pattern] | 通配符*查看复合模版的所有key | 由于redis是单线程的,业务量大的时候不适合使用该指令,会占用非常多的时间,不建议在生产环境设备上使用; 示例:当keys *,查看所有key key a* 查看以a开头的key |
del key | 删除一个指定的key,可以接受多个key,空格隔开不同的key | 返回值代表删除的数量 |
exists key | 判断一个key是否存在 | |
expire key time | 给一个key设置有效期,有效期到自动删除 | 例如:expire age 18,age的有效期是18秒 |
ttl key | 查看一个key的有效剩余期限 | 当返回值为-1,说明该值永久有效,为正数是剩余期限,表示为-2表示已过期 |
KEY的层级模式
数据库的表结构如下:
学生表
课程表
转换成redis该怎么表示呢?
示例:
school:student:1 {"id":1,"姓名":"xx","班级":1}
school:course:1 {"cid":1,"名称":"xxxx","老师":"sss"}
通过:划分层级,后跟json字符串储存信息