Redis(一)数据结构与基本命令

String(字符串)

STRING支持以下三种类型的值:

  • 字符串
  • 整数
  • 二进制

命令介绍

读写

  • SET [KEY] [VALUE]
    设置键key的值为value
    时间复杂度:O(1)

  • MSET [KEY1] [VALUE1] [KEY2] [VALUE2]...
    批量设置若干个键值key-value的值

  • SETNX [KEY] [VALUE]
    键不存在时,设置键key的值为value
    时间复杂度:O(1)
    相当于只做新建

  • SET [KEY] [VALUE] XX
    键存在时,设置键key的值为value
    时间复杂度:O(1)
    相当于只做更新

  • GETSET [KEY] [VALUE]
    设置键key的值为新的new-value,并返回旧的old-value
    时间复杂度:O(1)

  • GET [KEY]
    获取键key的值 
    时间复杂度:O(1)

  • MGET [KEY1] [KEY2] [KEY3]...
    批量获取若干个键key的值

  • DEL [KEY]
    删除键key及其对应的值value  
    时间复杂度:O(1)

自增自减

  • INCR [KEY]
    将键key存储的值加1
    时间复杂度:O(1)

  • DECR [KEY]
    将键key存储的值减1
    时间复杂度:O(1)

  • INCRBY [KEY] NUM
    将键key存储的值加上整数num的值
    时间复杂度:O(1)

  • DECRBY [KEY] NUM
    将键key存储的值减去整数num的值
    时间复杂度:O(1)

  • INCRBYFLOAT [KEY] NUM
    将键key存储的值加上浮点数num的值
    时间复杂度:O(1)
    没有减去浮点数的命令,可以用此命令加上负数实现

字串处理

  • STRLEN [KEY]
    返回字符串的长度
    时间复杂度:O(1)
    中文长度大于中文个数

  • APPEND [KEY] VALUE
    在键key后面追加值value
    时间复杂度:O(1)

  • GETRANGE [KEY] START END
    获取字符串指定下标范围内的所有值
    时间复杂度:O(1)
    redis的索引从0开始计数

  • SETRANGE [KEY] INDEX [VALUE]
    设置字符串指定下标index位置的值为value
    时间复杂度:O(1)

场景分析

  • 对访问量、点击数等进行计数

  • 缓存序列化后的对象。缓存形如JSON、XML等格式的数据

  • 得益于Redis单线程且速度快的特性,可以使用INCR、INCRBY命令,实现高并发下的全局唯一ID生成器

  • 数据结构简单,便于进行TTL设置操作(time to live,剩余生存时间)。

Hash(散列)

redis的散列可以存储多个键值对之间的映射。
散列具有很多和字符串相同的特性。

命令介绍

  • HGET [KEY] [FIELD]
    获取哈希表key中对应filed的值
    时间复杂度:O(1)

  • HMGET [KEY] [FIELD1] [FIELD2].... [FIELDN]
    批量获取哈希表key中若干filed的值
    时间复杂度:O(n)

  • HGETALL [KEY]
    获取哈希表key对应所有的field和value
    时间复杂度:O(n)
    数据量大时,尽量不要使用HGETALL

  • HKEYS [KEY]
    获取哈希表key对应所有field
    时间复杂度:O(n)

  • HVALS [KEY]
    获取哈希表key对应所有field的value
    时间复杂度:O(n)

  • HLEN [KEY] [FIELD]
    获取hash表key中field的数量
    时间复杂度:O(1)

  • HEXISTS [KEY] [FIELD]
    判断哈希表key中是否存在filed
    时间复杂度:O(1)

  • HSET [KEY] [FIELD] [VALUE]
    设置哈希表key中对应filed的值为value
    时间复杂度:O(1)

  • HMSET [KEY] [FIELD1] [VALUE1]... [FIELDN] [VALUEN]
    批量设置哈希表key中对应filed的值为value
    时间复杂度:O(n)

  • HDEL [KEY] [FIELD]
    删除哈希表key中的一个field
    时间复杂度:O(1)

  • HINCRBY [KEY] [FIELD] NUM
    将键哈希表key中field的值加上整数num
    时间复杂度:O(1)
    Hash类型没有减去整数的命令,可以用此命令加上负数实现

  • HINCRBYFLOAT [KEY] [FIELD] NUM
    将键哈希表key中field的值加上浮点数num
    时间复杂度:O(1)
    Hash类型没有没有减去浮点数的命令,可以用此命令加上负数实现

场景分析

  • 直观,用于缓存细节特性多的数据,比如用户、视频、商品的基本信息。
  • 代码控制稍复杂,不如直接操作String字符串来的简单方便,但是更省内存,每一个属性作为field,可以对filed进行更新而不用覆写整个Hash。

Set(无序集合)

特点

无序、无重复、支持集合间操作(交集、并集、差集)

命令介绍

  • SADD [KEY] [VALUE]

向集合中添加元素value

时间复杂度O(1)

如果value已经存在,则添加失败

  • SREM [KEY] [VALUE]

删除集合中的元素value

时间复杂度O(1)

  • SCARD [KEY]

计算集合的大小

时间复杂度O(1)

  • SMENBERS [KEY]

获取集合中所有的元素

时间复杂度O(n)

数据量大时,尽量不要使用SMENBERS,可用SSCAN代替SMEMBER

  • SISMENBER [KEY]

判断元素是否在集合中

时间复杂度O(1)

  • SRANDMENBER [KEY] NUM

从集合中随机取出num个元素

时间复杂度O(n)

不会改变集合原有数据

  • SPOP [KEY]

从集合中随机弹出一个元素

时间复杂度O(1)

会改变集合原有数据

  • SDIFF [KEY1] [KEY2]

计算集合间的差集

  • SINTER [KEY1] [KEY2]

计算集合间的交集

  • SUNION [KEY1] [KEY2]

计算集合间的并集

场景分析

  • SPOP / SRANDMENBER :在抽奖系统中进行随机抽奖
  • SADD :将标签添加到用户,或者将用户添加到标签
  • SDIFF / SINTER / SUNION + store destkey 将结果保存成一个新的key

ZSet(有序集合)

特点

无重复元素、有序、组成结构为score + element

命令介绍

场景分析

其他基本命令

posted @ 2019-03-28 15:24  LuckinJack  阅读(117)  评论(0)    收藏  举报