- redis五大数据类型简单操作
-
字符串类型
SET key value
GET key
MSET key value [key value …] 同时设置多个键值位操作
MGET key [key …] 同时获得多个键值
INCR key 为键 key 储存的数字值加上一
INCRBY key increment
DECR key 为键 key 储存的数字值减上一
DECRBY key decrement
APPEND key value 向尾部追加值
STRLEN key 获取字符串长度
GETBIT key offset 获得一个字符串类型键指定位置的二进制位的值(0或1)
SETBIT key offset value 设置字符串类型键指定位置的二进制位的值,返回值是该位置的旧值
BITCOUNT key [start] [end] 获得字符串类型键中值是1的二进制位个数
BITOP operation destkey key [key …] 对多个字符串类型键进行位运算,支持的运算操作有AND、OR、XOR 和NOT -
散列类型
HSET key field value
HGET key field
HMSET key field value [field value …] 同时将多个 field-value (域-值)对设置到哈希表 key 中
HMGET key field [field …] 返回哈希表 key 中,一个或多个给定域的值
HGETALL key 返回哈希表 key 中,所有的域和值
HEXISTS key field 判断字段是否存在
HSETNX key field value 与HSET命令类似,区别在于如果字段已经存在,HSETNX命令将不执行任何操作
HINCRBY key field increment 为哈希表 key 中的域 field 的值(不能为字符串值)加上增量 increment(其可为负数,对应减)
HDEL key field [field …] 删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略
HKEYS key 返回哈希表 key 中的所有域
HVALS key
HLEN key 返回哈希表 key 中域的数量 -
列表类型
LPUSH key value [value …] 将一个或多个值 value 插入到列表 key 的表头,若key不存在,则创建key后再执行
RPUSH key value [value …] 将一个或多个值 value 插入到列表 key 的表尾(最右边),若key不存在同LPUSH
LPUSHX key value 与LPUSH不同的是当 key 不存在时, RPUSHX 命令什么也不做
RPUSHX key value 与LPUSHX同理
LPOP key 移除并返回列表 key 的头元素
RPOP key 移除并返回列表 key 的尾元素
LLEN key 返回列表 key 的长度
LRANGE key start stop 返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定
LREM key count value 根据参数 count 的值,移除列表中与参数 value 相等的元素
LINDEX key index 返回列表 key 中,下标为 index 的元素
LSET key index value 将列表 key 下标为 index 的元素的值设置为 value
LTRIM key start end 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除
LINSERT key BEFORE|AFTER pivot value 将值 value 插入到列表 key 当中,位于值 pivot 之前或之后
RPOPLPUSH source destination 将列表 source 中的最后一个元素(尾元素)弹出,并返回给客户端。而后将 source 弹出的元素插入到列表 destination ,作为 destination 列表的的头元素 -
集合类型
SADD key member [member …]
SREM key member [member …]
SMEMBERS key
SISMEMBER key member判断一个元素是否在集合中
SDIFF key [key …]
SINTER key [key …]
SUNION key [key …]
SCARD key
SDIFFSTORE destination key [key …]
SINTERSTORE destination key [key …]
SUNIONSTORE destination key [key …]
SRANDMEMBER key [count]
SPOP key -
有序集合类型
ZADD key score member [score member …]
ZRANGE key start stop [WITHSCORES]
ZREVRANGE key start stop [WITHSCORES]
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
ZINCRBY key increment member
ZCARD key
ZCOUNT key min max
ZREM key member [member …]
ZREMRANGEBYRANK key start stop
ZREMRANGEBYSCORE key min max
ZRANK key member
ZREVRANK key member
ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGREGATE SUM|MIN|MAX]
- redis集群
redis集群没有使用一致性hash算法,而是使用hash槽,将集群的密钥空间分为16384个槽,然后给每个redis分一个主节点(一般不超过1000个)。hash槽计算方式:crc16算法产生的哈希值有16bit,也就是说有2^16=65536个值,而后对这个范围的值对16384取模。而之所以使用16384(2^14)这个数可以看博客说法:[redis槽位为什么是16384个?](https://www.cnblogs.com/karbon/p/14417582.html)。主要还是每次发送心跳包的大小问题
一致性hash算法:假设hash值范围为[0, 2^32-1],使用hash环,将0值和'2^32-1'结合,则所有key计算的hash值就都在此hash环中。在环中分布redis节点,每个key值在计算hash值后就顺时针找最近的节点进行存储。优点:容错性,扩展性;缺点:数据倾斜。
hash槽:如上在数据和节点之间加了一层hash槽(hash槽解决的是粒度问题,hash解决的是映射问题),然后在槽依顺序均分部分槽位给不同的redis节点。