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代表的都是字节数
原文地址:https://www.cnblogs.com/TheQi/p/12697708.html