1.Hash 型操作命令
Hash 表就是一个映射表 Map,由键值对构成,为和DB的 key 进行区分,Hash的键称为 field,值称为 value。field-value 对均为 String 类型
1.1.hset
1)命令:HSET key field value
2)功能:将key 中的 field 值设为 value,如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作,若存在则覆盖旧值。如果 field 是哈希表中的一个新建域,并且值设置成功,返回 1 。如果哈希表中域 field 已经存在且旧值已被新值覆盖,返回 0
1.2.hget
1)命令:HGET key field
2)功能:返回给定key 中给定field 的值
1.3.hmset
1)命令:HMSET key field value [field value ...]
2)功能:同时将多个 field-value对设置到 key 中,已存在则覆盖
1.4.hmget
1)命令:HMGET key field [field ...]
2)功能:按照给出顺序返回哈希表 key 中一个或多个域的值
1.5.hgetall
1)命令:HGETALL key
2)功能:返回key 中所有的域和值,若 key 不存在,返回空列表。若 key 中包含大量元素,则该命令可能会阻塞 Redis 服务。所以生产环境中一般不使用该命令,而使用 hscan 命令代替
1.6.hsetnx
1)命令:HSETNX key field value
2)功能:将 key 中的 field 的值设置为 value ,当且仅当域 field 不存在
1.7.hdel
1)命令:HDEL key field [field ...]
2)功能:删除 key 中的一个或多个指定域,不存在的域将被忽略
1.8.hexits
1)命令:HEXISTS key field
2)功能:查看 key 中给定域 field 是否存在
1.9.hincrby 与 hincrbyfloat
1)命令:HINCRBY key field increment
2)功能:为哈希表 key 中的域 field 的值加上增量 increment 。hincrby 命令只能增加整数值,而 hincrbyfloat 可以增加小数值。增量也可以为负数
1.20.hkeys 与 hvals
1)命令:HKEYS key 或 HVALS key
2)功能:返回 key 中的所有域/值
1.21.hlen
1)命令:HLEN key
2)功能:返回 key 中域的数量
1.22.hstrlen
1)命令:HSTRLEN key field
2)功能:返回哈key 中, 与给定域 field 相关联的值的字符串长度
1.23.应用场景
· Hash 型 Value 非常适合存储对象数据。key 为对象名称,value 为描述对象属性的 Map, 对对象属性的修改在 Redis 中就可直接完成。
2.List 型操作命令
列表中的数据会按照插入顺序进行排序。列表的底层实际是一个 无头节点的双向链表,所以对列表表头与表尾的操作性能较高,但对中间元素的插入与删除的操作的性能相对较差。
2.1.lpush/rpush
1)命令:LPUSH key value [value ...] 或 RPUSH key value [value ...]
2)功能:将一个或多个值 value 插入到列表 key 的表头/表尾。如果有多个 value 值,对于 lpush 来说,各个 value 会按从左到右的顺序依次插 入到表头;对于 rpush 来说,各个 value 会按从左到右的顺序依次插入到表尾
2.2.llen
1)命令:LLEN key
2)功能:返回 key中列表的长度
2.3.lindex
1)命令:LLEN key
2)功能:返回 key中列表的长度
2.4.lset
1)命令:LSET key index value
2)功能:将 key 下标为 index 的元素的值设置为 value
2.5.lrange
1)命令:LRANGE key start stop
2)返回 key 中指定区间[start, stop]内的元素,即包含两个端点
2.6.lpushx 与 rpushx
1)命令:LPUSHX key value 或 RPUSHX key value
2)功能:将值 value 插入到 key 的表头/表尾,当且仅当 key 存在并且是一个列表
2.7.linsert
1)命令:LINSERT key BEFORE|AFTER pivot value
2)功能:将值 value 插入到 key 当中,位于元素 pivot 之前或之后
2.8.lpop / rpop
1)命令:LPOP key [count] 或 RPOP key [count]
2)功能:从列表 key 的表头/表尾移除 count 个元素,并返回移除的元素。count 默认值 1
2.9.blpop / brpop
1)命令:BLPOP key [key ...] timeout 或 BRPOP key [key ...] timeout
2)功能:BLPOP/BRPOP 是列表的阻塞式(blocking)弹出命令。它们是 LPOP/RPOP 命令的阻塞版本,当给定列表内没有任何元素可供弹出的时候,连接将被 BLPOP/BRPOP 命令阻 塞,直到等待 timeout 超时或发现可弹出元素为止。当给定多个 key 参数时,按参数 key 的先后顺序依次检查各个列表,弹出第一个非空列表的头元素。timeout 为阻塞时长, 单位为秒,其值若为 0,则表示只要没有可弹出元素,则一直阻塞。若在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长,反之返回被弹出元素所属的 key和被 弹出元素的值
2.10.rpoplpush
1)命令:RPOPLPUSH source destination
2)功能:在一个原子时间内,将列表 source 中的最后一个元素(尾元素)弹出,并返回给客户端,然后将 source 弹出的元素插入到列表 destination ,作为 destination 列表的的头元素。如果 source 不存在,返回值 nil,并且不执行其他动作。如果 source 和 destination 相同,则列表中的表尾元素被移动到表头
2.11.brpoplpush
1)命令:BRPOPLPUSH source destination timeout
2)功能:RPOPLPUSH 的阻塞版本,当给定列表 source 不为空时, BRPOPLPUSH 的表现和 RPOPLPUSH 一样。当列表 source 为空时, BRPOPLPUSH 命令将阻塞连接,直到等待超时,或有另一个客户端对 source 执行 LPUSH 或 RPUSH 命令 为止。timeout 为阻塞时长,单位为秒,其值若为 0,则表示只要没有可弹出元素,则 一直阻塞。假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。反之返回被弹出元素的值和等待时长
2.12.lrem
1)命令:LREM key count value
2)功能:根据参数 count 的值,移除列表中与参数 value 相等的元素。若:count > 0 , 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count;count < 0 :,从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的 绝对值;count = 0 : 移除表中所有与 value 相等的值
2.13.ltrim
1)命令:LTRIM key start stop
2)功能:让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。0 表示列表的第一 个元素,-1 表示 列表的最后一个元素。start > stop 返回一个空列表,stop 下标比 end 下标还要大Redis 将 stop 的值设置为 end(LLEN list 减去 1)
2.14.应用场景
1)栈:通过 lpush + lpop 可以实现栈数据结构效果,左侧操作;rpush + rpop实现右侧操作
2)队列:通过 lpush + rpop 可以实现队列数据结构效果,左进右出;rpush + lpop相反
3)阻塞式消息队列:通过 lpush + brpop 可以实现阻塞式消息队列效果。brpop 的 timeout 设置为 0,只要没有数据可弹出,就永久阻塞
4)动态有限集合:通过 lpush + ltrim 可以实现有限集合,通过ltrim保持集合的动态有限性,如末尾淘汰制;rpush + ltrim操作方向相反
3.Set 型操作命令
3.1.sadd
1)命令:SADD key member [member ...]
2)功能:将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略
3.2.smembers
1)命令:SMEMBERS key
2)功能:返回集合 key 中的所有成员。若 key 中包含大量元素,可能会阻塞服务,所以一般不使用该命令,而使用 sscan 命令代替
3.3.scard
1)命令:SCARD key
2)功能:返回 Set 集合的长度
3.4.sismember
1)命令:SISMEMBER key member
2)功能:判断 member 元素是否集合 key 的成员
3.5.smove
1)命令:SMOVE source destination member
2)功能:将 member 元素从 source 集合移动到 destination 集合,并从source集合中移除。如果 source 集合不存在或不包含指定的 member 元素,则不执行任何操作。当 destination 集合已经包含 member 元素时,仅将 source 集合中的 member 元素删除
3.6.srem
1)命令:SREM key member [member ...]
2)功能:移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略,且返回成功移除的元素个数
3.7.srandmember
1)命令:SRANDMEMBER key [count]
2)功能:返回集合中的 count 个随机元素。count 默认值为 1。若 count 为正数,且小于集合长度,那么返回一个包含 count 个元素的数组, 数组中的元素各不相同;如果 count 大于等于集合长度,那么返回整个集合; count 为负数,那么返回一个包含 count 绝对值个元素的数组,但数组中的元素可能会出现重复
3.8.spop
1)命令:SPOP key [count]
2)功能:移除并返回集合中的 count 个随机元素。count 必须为正数,且默认值为 1。如果 count 大于等于集合长度,那么移除并返回整个集合
3.9.sdiff / sdiffstore
1)命令:SDIFF key [key ...] 或 SDIFFSTORE destination key [key ...]
2)功能:返回第一个集合与其它集合之间的差集。sdiffstore 不仅能够显示差集,还能将差集存储到指定的集合 destination 中。如果 destination 集合已经存在,则将其覆盖
3.10.sinter / sinterstore
1)命令:SINTER key [key ...] 或 SINTERSTORE destination key [key ...]
2)功能:返回多个集合间的交集。sinterstore 不仅能够显示交集,还能将交集存储到指定的集合 destination 中。如果 destination 集合已经存在,则将其覆盖
3.11.sunion / sunionstore
1)命令:SUNION key [key ...] 或 SUNIONSTORE destination key [key ...]
2)功能:返回多个集合间的并集。sunionstore 不仅能够显示并集,还能将并集存储到 指定的集合 destination 中。如果 destination 集合已经存在,则将其覆盖
3.12.应用场景
1)动态黑白名单
2)有限随机数:通过 spop 或 srandmember 可以实现从指定集合中随机选出元素,实现抽奖等
3)用户画像:根据用户提供的资料与用户使用习惯,为每个用户定义很多可以反映该用户特征的标签,这些标签就可以使用 sadd 添加到该用户对应的集合中。还可以使用 sinter/sinterstore 根据用户画像间的交集进行好友推荐、商品推荐、 客户推荐等