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+storedestkey 将结果保存成一个新的key
ZSet(有序集合)
特点
无重复元素、有序、组成结构为score + element

浙公网安备 33010602011771号