• redis


    一.命令相关:

    1.总体命令:

    1.1 常用命令

    • dbsize 看有多少键
    • exists key 查看key是否存在 存在返回1 不存在返回0
    • del key [key...] 返回成功删除key的个数
    • type key 可以查看key的数据结构
    • object encoding key 查看redis的内部编码 
    • rename key newkey 键重命名 如果在重命名之前newkey已经存在 那么会被覆盖

       renamenx 这个可以确保只有newkey不存在才会被覆盖 注:(1.重命名会删掉旧的key 如果对应的value比较大可能会阻塞 2 redis3.2之前是不允许newkey==key的)

    • randomkey 随机返回一个key

    1.2 时间相关的命令

    • expire key seconds 设置一个key的过期时间 秒级的
    • ttl key   查看一个key的剩余过期时间 大于0就是剩余过期时间 -1是没设置过期时间 -2是键不存在 秒级
    • expireat key timestamp 键在秒级时间戳timestamp后过期
    • pexpire ky milliseconds 键在milliseconds毫秒后过期
    • pttl key   查看一个key的剩余过期时间 大于0就是剩余过期时间 -1是没设置过期时间 -2是键不存在 毫秒级
    • pexpireat key timestamp 键在毫秒级时间戳后过期  
    • 注:
    • redis内部其实使用的都是pexpireat 
    • 如果expire key的键不存在直接返回0
    • 如果过期时间为负值key会被删除
    • persist可以将key的过期时间清除(相当于没设置过)
    • 对于字符串类型如果执行set会去掉过期时间

    1.3 遍历键

    1.3.1 全局遍历

    • keys pattern 
    • pattern可能的形式
    • * 任意字符
    • ?一个字符
    • [] 部分字符 [1,3] [1-3] 1和3  1到3
    • x 用来转义

    1.3.2 渐进遍历

    • scan cursor [match pattern] [count number]
    • cursor 代表游标 从0开始 每次遍历完都会返回当前游标的值  如果返回0说明遍历结束 下次scan用上次返回的值就可以
    • match 代表一次遍历多少个
    • 注:scan遍历可能会出现新增的键没有遍历到 或者遍历出了重复的键  需要考虑到

    2.字符串类型:(key是字符串类型 value不能超过512M)

    2.1设置值

    • set key value [ex seconds] [px milliseconds] [nx|xx]
    • nx:键必须不存在才可以设置成功,用于添加
    • xx:与nx相反,键必须存在,才能设置成功用于更新
    • setex key seconds values
    • setnx key value(分布式锁)
    • mset key value [key value ....] 批量set

    2.2获取值

    • get key
    • mget key [key ...]

    2.3计数

    • incr key自增
    • 键不是整数 返回错误
    • 键是整数 返回自增后的结果
    • 键不存在 按照值为0自增
    • 还有decr(自减),incrby(自增指定数字),decrby(自减指定数字),incrbyfloat(自增浮点数)

    2.4内部编码

    • int 8个字节的长整形
    • embstr 小于等于39个字节的字符串
    • raw 大于39个字节的字符串

    3哈希类型

    3.1 删除filed 

    •  hdel key field [field ...]

    3.2 计算field的个数

    • hlen key

    3.3 判断field是否存在

    • hexists key field 包含返回1 不包含返回0

    3.4 获取所有的field

    • hkeys key

    3.5 获取所有的value

    • hvals key

    3.6 自增

    • hincrby key field
    • hincrbyfloat key field

    3.7 计算value的长度

    • hstrlen key field

    3.8 内部编码

    • 当field个数比较少(默认小于512) 且 value全部小于(默认是64)个字节 会使用ziplist
    • 其他情况使用hashtable

    4.列表类型:(最多存储2^32-1个元素) 列表是有序的

    4.1 添加操作

    • rpush key value [value ...] 从右向左插入
    • lpush key value [value ...] 从左向右插入
    • linsert key before|after prvot value 会在整个列表里找到prvot这个value 在这个value的 before|after 插入新的value  这个是从左往右找 并且只找一个prvot

    4.2 查询操作

    • lrange key start end 从左到右获取所有value 下标从左到右是0~N-1 从右到左是-1~-N,end选项会包含自身 
    • lindex key index 根据下标获取元素
    • llen key 获取列表的长度

    4.3 删除操作

    • lpop key 从列表左侧弹出元素
    • rpop key 从列表右侧弹出元素
    • lrem key count value 在列表中找到value的元素进行删除 具体删除多少个取决于count的取值
    • ltrim key start end 按照范围取start-end (如果是1 3 就代表第二个到第四个元素)

    4.4 修改操作

    • lset key index value  需要传入修改元素的下标

    4.5 阻塞弹出

    • blpop key [key ...] timeout
    • brpop key [key ...] timeout 如果timeout为0就一直等 否则等timeout的秒数 如果多个key  那么从左向右遍历只要有一个key能够弹出就会返回 

    4.6 内部编码

    •  当列表元素个数小于(默认512个) 并且每个元素的值都小于(默认64字节)的时候使用ziplist 其他情况使用linkedlist

    5.集合: 集合是无序的,不能有重复元素的 一个集合最多有2^32-1个元素

    5.1 添加元素 

    • sadd key element [element ...]

    5.2 删除元素

    • srem key element [element ...]

    5.3 计算元素个数

    • scard key 这个复杂度是o(1)

    5.4 计算元素是否在集合中

    • sismember key element

    5.5 随机返回指定个数的元素

    • srandmember key [count] count默认是1

    5.6 随机弹出元素

    • spop key [count] 3.2版本之后支持count参数

    5.7 获取所有元素

    • smembers key

    5.8 集合的交并补

    • sinter key [key ...] 交集
    • sunion key [key ...] 并集
    • sdiff key [key ...] 差集 (第一个有第二个没有的)
    • sinterstore destination key [key ...]    将交集保存到destination(这个是一个新集合的key)里面  并集和差集同理 在后面加上stroe

    5.9 内部编码

    1. intset 整数集合   如果元素小于512(可以配置 默认值是512) 且当前元素都是数字 用intset  否则用hashtable
    2. hashtable  哈希表

    6.有序集合 有序 不可重复 有分值的概念按照分值排序

    6.1 添加成员

    • zadd key score member [score member ...]  有四个选项
    • nx member必须不存在   
    • xx member 必须存在
    • ch 返回此次操作后 有序集合元素和分数变化的个数
    • incr 对sorce增加

    6.2 计算成员个数

    • zcard key 获取元素个数

    6.3 获取某个成员的分数

    • zscore key member

    6.4 计算成员的排名

    • zrank key member 分数从低到高
    • zrevrank key member  分数从高到低,排名是从0开始计算 比如分数最高 那么zrevrank的结果就是0

    6.5 删除成员

    • zrem key member [member ...]

    6.6 增加成员的分数

    • zincrby key increment member 这里面increment是一个数值 为增加的具体分数

    6.7 返回指定排名范围的成员

    • zrange key start end [withscores]
    • zrevrange key start end [withscores]
    • zrange是从低到高返回 zrevrange是从高到低返回 
    • start和end 分别是下标  比如0 2 就代表返回前三个元素
    • withscores 如果加上这个字母 就连带着分数一起返回

    6.8 返回指定分数范围的成员

    • zrangebyscore key min max [withscores] [limit offset count]
    • zrevrangebyscore key min max [withscores] [limit offset count]
    • 其中上面的是从低到高返回 下面的是从高到低
    • 默认min和max都是闭区间 可以通过小括号或者中括号来设置 -inf和+inf代表无限小和无限大 比如可以 min=(200 max=+inf 就是200到正无穷不包括200    min=(200 max=(250 同理
    • limit offset count 类似于mysql limit 2 5 相当于越过两个成员 并取出5个成员

    6.9 返回指定分数范围的成员个数

    • zcount key min max

    6.10 删除

    • zremrangebyrank key start end 删除指定排名内的元素
    • zremrangebyscore key min max 删除指定分数范围的元素 

    6.11 集合间的操作

    6.11.1 交集

    • zinterstore destination numkeys key [key ...] [weights weight [weight ...]] [aggregate sum|min|max]
    • destination : 交集的结果保存到这个key
    • numkeys 计算交集的个数
    • weights weight 每个键的权重 默认是1 每个成员都会用自己的分数 * 这个权重 比如 zinterstore inter 2 k1 k2 weights 1 0.5  这个就是k1的分数和k2*0.5 最终交集取他们的和(默认是sum)
    • 交集计算完了之后分值可以按照sum min max做汇总 默认是sum 这个就是说两个一样的member 最后交集的score是取max的还是min的还是sum

    6.11.2 并集

    • zunionstore destination numkeys key [key ...] [weights weight [weight ...]] [aggregate sum|min|max] 和交集一样

    6.12 内部编码

    • ziplist 如果元素个数小于128 每个元素的值小于64个字节 就使用这个 否则使用skiplist (128 和 64都是默认的配置)
    • skiplist

    7. Bitmaps 这个东西本质是个数组 不过只能存0和1   

    7.1 设置值

    • setbit key offset value  里面的offset就是偏移量 从0开始 value只能是0或者1  如果offset比较大可能会阻塞redis

    7.2 获取值

    • getbit key offset 如果没有或者本身就是0 都会返回0

    7.3 获取指定范围为1的个数

    • bitcount key [start end] 其中start和end对应的是字节数 而数组是位数要*8  比如 bitcount key [1,3] 其实是在找下标[8,31]

    7.4 bitmaps间的运算

    • bitop op destkey key [key ...]  其中的op可以为and(交集) or(并集) not(非) xor(异或)
    • 会将多个key处理的结果保存到destkey中

    7.5 计算bitmaps里第一个值为targetbit的偏移量

    • bitpos key targetBit [start] [end]
    • targetBit 只能是0或1  start和end代表的都是字节数
  • 相关阅读:
    面试题|Docker的优缺点
    【华为出品】物联网全栈开发实战营来啦!送海思双目开发板
    Nginx实战|Nginx健康检查
    Linux中几个正则表达式的用法
    盘点提高国内访问 Github 的速度的 9 种方案
    一行代码如何隐藏 Linux 进程?
    (二)类加载机制与反射:类加载器
    (一)类加载机制与反射:类的加载,连接和初始化
    (八)多线程:线程相关类
    (七)多线程:线程池
  • 原文地址:https://www.cnblogs.com/TheQi/p/12697708.html
Copyright © 2020-2023  润新知