redis小知识记录ING

- redis五大数据类型简单操作

  1. 字符串类型
    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

  2. 散列类型
    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 中域的数量

  3. 列表类型
    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 列表的的头元素

  4. 集合类型
    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

  5. 有序集合类型
    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节点。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值