文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

redis 详解(2)API

2022-01-10 05:16

关注

通用命令

通用命令

命令 说明 时间复杂度
keys [pattern] 遍历所有 key O(n)
dbsize 计算 key 的总数 O(1)
del key [key...] 删除指定 key-value O(1)
exist key 检查 key 是否存在 O(1)
expire key seconds key 在 seconds 秒后过期 O(1)
type key 返回 key 的类型 O(1)
ttl key 查看 key 剩余的过期时间 O(1)
persist key 去掉 key 的过期时间(永不过期) O(1)

数据结构和内部编码

redis object

单线程架构

单线程为什么快

注意

字符串(最大限制 512M)

结构

key value
ke val
count 1
bits 1011101

场景

命令

命令 说明 时间复杂度
get key 获取 key 对应的 value O(1)
set key value 不管key是否存在,设置 key-value O(1)
setnx key value key不存在,才设置 O(1)
set key value xx key存在才设置 O(1)
del key 删除 key-value O(1)
incr key key自增1,如果key不存在,自增后get(key)=1 O(1)
decr key key自减1,如果key不存在,自减后get(key)=-1 O(1)
incrby key k key自增k,如果key不存在,自增后get(key)=k O(1)
decrby key k key自减k,如果key不存在,自减后get(key)=-k O(1)
mget key1 key2 key3... 批量获取key的value,原子操作 O(n)
mset key1 value1 key2 value2 .. 批量设置key-value O(n)
getset key newvalue set key newvalue并返回旧value O(1)
append key value 将value追加到旧value O(1)
strlen key 返回字符串长度 O(1)
incrbyfloat key float 增加key对应的值float O(1)
getrange key start end 获取字符串指定下标所有值 O(1)
setrange key index value 设置指定下标所有对应的值 O(1)

哈希

结构

key field value
user:1 name tom
age 20
sex male

命令

命令 说明 时间复杂度
hget key field 获取hash key对应field的value O(1)
hset key field value 设置hash key对应field的value O(1)
hdel key field 删除hash key对应field的value O(1)
hexists key field 判断hash key是否有field O(1)
hlen key 获取hash key field数量 O(1)
hmget key field1 field2... 批量获取hash key对应一批field的value O(n)
hmset key field1 value1 field2 value2... 批量设置hash key对应一批field的value O(n)
hgetall key 返回hash key对应所有的field和value O(n)
hvals key 返回hash key对应所有field的value O(n)
hkeys key 返回hash key对应所有field O(n)
hmset key field1 value1 field2 value2... 批量设置hash key对应一批field的value O(n)
hsetnx key field value 设置hash key对应的field的value(如field已经存在,则失败) O(1)
hincrby key field intcounter hash key对应的field的value自增intcounter O(1)
hincrbyfloat key field floatcounter hincrby浮点数版本 O(1)

方案比较

string v1

string v2

hash

命令 优点 缺点
string v1 编程简单,节约内存 序列化操作开销大,设置属性要操作整个数据
string v2 直观,可以部分更新 内存占用较大,key较分散
hash 直观,节省空间,可以部分更新 编程稍微复杂,ttl不好控制

列表

结构

key elements
user:1:msg a,b,c,d

特点

命令

命令 说明 时间复杂度
rpush key value1 value2... 从列表右端插入值(1-N个) O(1-n)
lpush key value1 value2... 从列表左端插入值(1-N个) O(1-n)
lpop key 从列表左侧弹出一个value O(1)
rpop key 从列表右侧弹出一个value O(1)
linsert key before/afer value newValue 在list指定的值前/后插入newValue O(n)
lrem key count value 根据count值,从列表删除所有value相等的项 O(n)
ltrim key start end 按照索引范围修剪列表 O(n)
lrange key start end 获取列表指定索引范围所有value O(n)
lindex key index 获取列表指定索引的value O(n)
llen key 获取列表长度 O(1)
lset key index newValue 设置列表指定索引值为newValue O(n)
blpop key timeout lpop阻塞版本,timeout是阻塞超时时间,timeout=0为永不阻塞 O(1)
brpop key timeout rpop阻塞版本,timeout是阻塞超时时间,timeout=0为永不阻塞 O(1)

lrem key count value

应用场景

集合

结构

key elements
user:1:follow music,sport,read

特点

命令

命令 说明 时间复杂度
sadd key element 向集合key添加element(如果已存在,添加失败) O(1)
srem key element 删除集合key中的element O(1)
scard key 计算集合大小
sismember key element 判断element是否在集合中
srandmember key count 从集合中随机挑count个元素,不会破坏家伙
spop key 从集合中随机弹出一个元素,元素从集合移除
smembers key 获取集合所有元素
sdiff key1 key2 差集
sinter key1 key2 交集
sunion key1 key2 并集
sdiff/sinter/sunion + store destkey 将差集、交集、并集结果报错在destkey中

应用场景

sadd=tagging spop/srandmember=randon item sadd+sinter=social graph

有序集合

结构

key score value
user:rank 1 tom
user:rank 5 peter

比较

有序集合 集合
无重复元素 无重复元素
有序 无序
element+score element
有序集合 列表
无重复元素 有重复元素
有序 有序
element+score element

命令

命令 说明 时间复杂度
zadd key score element 添加score和element(可以多对) O(logN)
zrem key element 删除元素(可以多个) O(1)
zscore key element 返回元素分数 O(1)
zincrby key increScore element 增加或减少元素分数 O(1)
zcard key 返回元素总个数 O(1)
zrange key start end [WITHSCORES] 返回指定索引范围内的升序元素[分值] O(logN+m)
zrangebyscore key minScore maxScore[WITHSCORES] 返回指定分数范围内的升序元素[分值] O(logN+m)
zcount key minScore maxScore 返回有序集合内在指定分数范围内的个数 O(logN+m)
zremrangebyrank key start end 删除指定排名内的升序元素 O(logN+m)
zremrangebyscore key minScore maxScore 删除指定分数内的升序元素 O(logN+m)

欢迎扫描下方二维码,持续关注:

互联网工程师(id:phpstcn),我们一起学习,一起进步

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯