jedis mysql 数据结构_Redis常用数据结构和使用场景

Redis默认为16个库,在配置文件中可以修改,从0开始,每个库互相隔离,库中存储的是key,vaule键值对。value分为五种数据结构,分别是string、hash、list、set、sortedSet。

String

String结构又存在3种类型,分别是字符串、数值、bitmap。字符串

set k1 hello nx只能新增,只有当k1不存在时才能设置成功。

set k1 hello xx 只能修改,只有当k1存在时才能设置成功。

getset指令相比于先`get`再`set`而言,少了一次IO。

使用场景:分布式锁数值

set k1 999type为string,而encoding为int,这样做`incr`操作的时候不需要判断类型,直接计算即可。

redis是二进制安全的,从socket中读取的是字节流,并不对字节流中的数据进行编码,保证了数据不会被破坏。比如说,如果编码后存储,两个客户端的编码解码不一致,A存储一个字符为两个字节,而B解析出来是四个字节,可能会造成溢出。

使用场景:在一些系统中看似不是很重要的统计,抢购,秒杀,详情页中数据统计,点赞,评论等。可以规避并发情况下对数据库的事务操作,完全由redis内存操作代替。bitmap

setbit k1 1 1 将k1对应的bit位设置为1

使用场景:用户签到、在线用户统计、统计活跃用户。比如统计活跃用户:一个用户系统,要求统计用户登录天数,且窗口随机(某天到某天的数)。常规mysql:存储在表中,每个用户每天登录即为一行数据,每行数据至少需要id,日期等,在8个字节左右,当用户量特别大的时候,查询效率会很慢。会有磁盘IO,读取出来的数据进行解码,再做计算。利用redis的bitmap:一年固定有365天或366天,这样可以用366个二进制位,即最多50个字节就可以记录每个用户一年的登录情况。某天登录把对应的二进制位改为1即可,当查询时,使用bitcount计算即可。即节省了空间,又提高了效率。假如说有1000W用户,500M空间存储足以。

String常用命令:SET key value [EX seconds] [PX milliseconds] [NX|XX]: 将 key 和 value 关联

GET key: 获取key 关联的 value

GETSET key value: 将 key 和 value 关联,如果 key 已经存在返回旧值

STRLEN key: 获取 key 关联的 value 长度

APPEND key value: 将 value 追加到 key 已经关联的 value 末尾

SETRANGE key offset value: 从 offset 开始,用 value 覆 盖 key 已经关联的 value

GETRANGE key start end: 获取 key 关联的 value 从 start 到 end 的字符串INCR key: 将 key 已经存储的数字值加一

INCRBY key increment: 为 key 存储的数字值加上 increment 增量

INCRBYFLOAT key increment: 为 key 存储的数字值加上 increment 浮点数增量

DECR key: 将 key 已经存储的数字值减一

DECRBY key decrement: 为 key 存储的数字值减去 decrement 减量

MSET key value [key value ...]: 同时设置多个 key-value,该操 作为原子操作

MSETNX key value [key value ...]: 当所有 key 都不存在时设置 多个 key-value,该操作为原子操作

MGET key [key ...]: 获取多个 key 的 value 值

位图常用命令:SETBIT key offset value: 对字符串 key 在 offset 位置处设置位

GETBIT key offset: 获取字符串 key 在 offset 的位置

BITCOUNT key [start] [end]: 获取区间内位值设为1的数量

BITPOS key bit [start] [end]: 获取区间内第一个位置设为 bit 的位 置

BITOP operation destkey key [key...]: 对一个或者多个 key 进行 位元操作(AND/OR/XOR/NOT)并将结果保存到 destkey

BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WARP|SAT|FAIL]: 对 key 进 行相关的位域操作

List

同向命令 lpush+lpop 或者 rpush+rpop

反向命令 push+rpop或者 rpush+lpop

lindex 、lset 对索引进行操作

blpop、brpop如果有十个客户端阻塞着,当有数据之后,先服务先到的,剩下的继续阻塞。

使用场景:栈

队列,比如:关注队列、粉丝队列

消息队列

常用命令:LPUSH key value [value...]: 将多个 value 依次插入 list 的表头

LPUSHX key value: 将 value 插入已经存在的 list 的表头

RPUSH key value [value...]: 将多个 value 依次插入 list 的表尾

RPUSHX key value: 将 value 插入已经存在的 list 的表尾

LPOP key: 移除并返回 list 的表头元素 RPOP key: 移除并返回 list 的表尾元素

BLPOP key [key...] timeout: 弹出第一个非空 list 的头元素,否则 阻塞等待 timeout 秒

BRPOP key [key...] timeout: 弹出第一个非空 list 的尾元素,否则 阻塞等待 timeout 秒

RPOPLPUSH source destination: 将 source 的尾元素弹出并插入 到 destination 的头部,同时返回该元素

BRPOPLPUSH source destination timeout: 将 source 的尾元素 弹出并插入到 destination 的头部,同时返回该元素;若 source 为空,则阻塞等待 timeout 秒

LREM key count value: 根据 count 值,移除 list 中值为 value 的 元素

LLEN key: 返回 list 长度

LINDEX key index: 返回 list 下标为 index 的元素

LINSERT key BEFORE|AFTER pivot value: 在值为 pivot 元素的之 前/之后插入 value

LSET key index value: 设置 list 下标为 index 的元素值为 value

LRANGE key start stop: 返回 list 指定区间内的元素

LTRIM key start stop: 删除 list 指定区间外的元素

Hash

相当于Java中的HashMap。可以对field进行数值计算,与文档型存储的区别是,value是个hash类型,但hash中的value不能再嵌套,只能是单一类型。

使用场景:点赞、收藏、详情页等

常用命令:HSET hash field value: 将 hash 的 field 字段值设置为 value

HSETNX hash field value: 如果 field 字段不存在则设置为 value

HMSET key field value [field value ...]: 给 hash 设置多个 field- value 对

HDEL key field [field ...]: 删除 hash 的多个 field

HGET hash field: 获取 hash 的 field 字段值

HMGET hash field [field ...]: 获取 hash 多个 field 值

HEXISTS hash field: 判断 hash 是否存在 field 域 HKEYS key : 获取 hash 所有的 field 域

HVALS key : 获取 hash 所有 value 值

HGETALL key : 获取 hash 所有的域值对

HLEN key: 获取 hash 的 field 数量

HSTRLEN hash field: 获取 hash 的 field 的 value 长度

HINCRBY key field increment: 将 hash 的 field 的值加上增量 increment

HINCRBYFLOAT key field increment: 将 hash 的 field 的值加上 浮点数增量 increment

Set无序去重

集合操作:交集、并集等,并提供存储到目标`key`的方法。

随机事件

使用场景:关注集合:共同关注、二度好友

点赞集合

抽奖集合

用户标签

常用命令:SADD key member [member...]: 将多个元素放入 set 中

SISMEMBER key member: 判断 member 是否在 set 中

SPOP key: 移除并返回 set 中随机一个元素 SRANDMEMBER key [count]: 返回 set 中随机数组

SMEMBERS key: 返回 set 所有元素

SREM key member [member...]: 移除 set 中多个元素

SMOVE source destination member: 将 member 从 source 移动到 destination

SCARD key: 返回 set 的元素数量(集合的基数)

SINTER key [key...]: 返回多个 set 的交集

SINTERSTORE destination key [key...]: 将多个 set 的交集覆盖destination

SUNION key [key...]: 返回多个 set 的并集

SUNIONSTORE destination key [key...]: 将多个 set 的并集覆盖 destination

SDIFF key [key...]: 返回多个 set 的差集

SDIFFSTORE destination key [key...]: 将多个 set 的差集覆盖 destination

Sorted Set

维护顺序,按score值从小到大,且不随命令而改变。用于排序的值叫做score,实际存储的值叫做member。ZINCRBY 可以对数值进行计算,且改变score后自动维护顺序。使用ZREVRANGE倒序获取

集合操作:交集、并集。带权重/聚合指令

排序实现:ziplist 压缩链表 + skip list 跳跃表

使用场景:排行榜

时间轴

优先级队列

常用命令:ZADD key score member [[score member]...]: 将多个 member 元素 和 score 值设置到 sorted set 中

ZSCORE key member: 返回 member 元素的 score 值 ZINCRBY key increment member: 将 member 元素的 score 值加上 increment 增量

ZCARD key: 返回元素数目(集合基数)

ZCOUNT key min max: 返回 score 值在区间内的元素数目

ZRANGE key start stop [WITHSCORES]: 返回排名在区间内的元 素(以及 score 值),并按 score 值从小到大排列,相同 score 值按字典序排列

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]: (指定起始位置和数量)返回 score 值在区间内的元素 (以及 score 值),并按 score 值从小到大排列,相同 score 值 按字典序排列

ZRANGEBYLEX key min max [LIMIT offset count]: (指定起始位 值和数量)返回按字典序在区间内的元素,要求所有元素必须有 相同 score 值

ZREVRANGE key start stop [WITHSCORES]: 返回排名在区间内 的元素(以及 score 值),按 score 值从大到小排列,相同 score 值按字典序逆序排列

ZREVRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]: (指定起始位置和数量)返回 score 值在区间内的 元素(以及 score 值),并按 score 值从大到小排列,相同 score 值按字典序逆序排列;

ZRANK key member: 返回 member 元素的排名(按 score 值从 小到大排)

ZREVRANK key member: 返回 member 元素的排名(按 score 值从大到小排)

ZREM key member [member...]: 移除 sorted set 的多个元素

ZREMRANGEBYRANK key start stop: 移除排名在区间内的所有 元素

ZREMRANGEBYSCORE key min max: 移除 score 值在区间内的 所有元素

ZREMRANGEBYLEX key min max: 移除按字典序在区间内的所有 元素,要求所有元素有相同 score 值

ZLEXCOUNT key start stop: 计算字典序在区间内的元素数量,要 求所有元素有相同 score 值

ZINTERSTORE destination numkeys key [key...] [WEIGHTS weight [weight...]] [AGGREGATE SUM|MIN|MAX]: (指定 score 值的乘法因子)(相同元素按照 score 值之和/最小/最大)计算 多个 sorted set 的交集并覆盖 destination

ZUNIONSTORE destination numkeys key [key...] [WEIGHTS weight [weight...]] [AGGREGATE SUM|MIN|MAX]: (指定 score 值的乘法因子)(相同元素按照 score 值之和/最小/最大)计算 多个 sorted set 的并集并覆盖 destination

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值