Redis6之数据类型

常见数据类型

String字符串

简介

        String是最基本的数据类型,是二进制安全的,一个key对应一个value

常用命令

        1.set <key> <value> :添加键值对

        2.get <key>:查询对应键值对

        3.append <key> <value>:将给定的值添加到原值的末尾

        4.strlen <key>:获取值的长度

        5.setnx <key> <value>:设置值;只有key不存在时才能设置;如果存在就设置不成功,不会覆盖

        6.incr <key>:将key中存储的数字加一,只能对数字操作,如果为空,就新增值为1

        7.decr <key>:将key中存储的数字减一,只能对数字操作,如果为空,就新增值为-1

        8.incrby/decrby <key> <步长>:将key中的数字增减,自定义步长

        9.mset <key1> <key2> <key3>...:同时设置多个键值对

        10.mget <key1> <key2> <key3>...:同时获取多个value        

        11.msetnx <key1> <value1> <key2> <value2>:同时设置一个或多个键值对,仅当key不存在(具有原子性,有一个失败全部失败)

        12.getrange <key> <起始位置> <结束位置>:获取值的范围

        13.setrange <key> <起始位置> <value>:用<value>覆写<key>所存储的字符串值,从<起始位置>开始

        14.setex <key> <过期时间> <value> :设置键值的同时设置过期时间,单位为秒

        15.getset <key> <value>:以旧换新,设置新值同时获取了旧值

数据结构

        String的数据结构是动态字符串;是可以修改的字符串,采用预分配冗余空间的方式来减少内存的频繁分配。

        内部为当前字符串分配的空间一般要高于实际长度;当字符串的长度小于1M时,扩容都是加倍现有空间,如果超过1M,扩容时一次只会多扩展1M的空间。字符串的最大长度为512M。

List列表

简介

        单键多值;

        是简单的字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部或者尾部;底层是双向链表,对两端的操作性能很高,通过索引下标操作中间的元素性能较差

常用命令

        1.lpush/rpush <key> <value1> <value2> <value3>....,:从左边或者右边插入一个或多个值

        2.lpop/rpop <key> :从左边或者右边读出值,读出后键值消失

        3.rpoplpush <key1> <key2>:从key1列表的右边读出一个值,插入到<key2>的左边

        4.lrange <key> <start> <stop>:按照索引下标获取元素(从左到右)

        如:lrange <key> 0 -1:0是左边第一个,-1是右边第一个;(0 -1表示获取所有)

        5.lindex <key> <index>:按照下标获取元素(从左到右)

        6.llen <key> :获取列表长度

        7.linsert <key> before <value> <newvalue> :在<value>后插入<newvalue>值

        8.lrem <key> <n> <value>:从左边删除n个value(从左到右)

        9.lset <key> <index> <value>:将列表key下标为index的值替换为<value>

数据结构

        Redis3.2前,底层是用压缩列表zipList、双向循环链表linkedList

        Redis3.2及之后的底层实现方式:quickList(quickList)

Hash哈希

简介

        是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象

常用命令

        1.HDEL <key>field2 [field2]:删除一个或多个hash字段。
        2.HEXISTS <key> field:确定hash字段是否存在。
        3.HGET <key> field:获取存储在指定键处的hash字段的值。
        4.HGETALL <key>:获取按指定键存储在hash中的所有字段和值
        5.HINCRBY <key>field increment:将哈希字段的整数值递增到给定的数字
        6.HINCRBYFLOAT <key> field increment :将哈希字段的浮点值按给定的量递增
        7.HKEYS <key>:获取hash中的所有字段
        8.HLEN <key>:获取hash中的字段数
        9.HMGET <key> field1 [field2] :获取所有给定哈希字段的值
        10.HMSET <key> field1 value1 [field2 value2 ] :将多个哈希字段设置为多个值
        11.HSET <key> field value:设置hash字段的字符串值
        12.HSETNX <key> field value :仅在hash字段不存在时设置该字段的值
        13.HVALS <key> :获取hash中的所有值
        14.HSCAN <key> cursor [MATCH pattern] [COUNT count]  :递增地迭代哈希字段和关联值

 数据结构

        hash底层的结构是 ziplist 和 hashtable

默认情况下:

  1. 当ziplist中entry的数量超过512的时候,会转成hashtable

  2. 单个元素的值超过64字节的时候,会转成hashtable

Set集合

简介

        set对外提供的功能与list类似,特殊之处在于可以自动排重;同时提供了判断某个成员是否在集合内的判断;

        是一个无序集合,其底层是一个value为null的hash表,所以添加、删除、查找的复杂度都是O(1)。

常用命令

        1.sadd <key> <value1> <value2> <value3>:将一个或者多个元素加入到集合中,已经存在的被忽略

        2.smembers <key>:取出该值的所有集合

        3.sismember <key> <value>:判断集合<key> 是否含有该<value>的值,有1,没有0

        4.scard <key>:返回集合个数

        5.srem <key> <value1> <value2> ...:删除集合中的某个元素

        6.spop <key>:随机从集合中吐出一个值

        7.srandmember <key> <n>:随机从该集合中取出n个值,不会从集合中删除

        8.smove <key1> <key2>:返回两个集合中的元素交集

        9.sunion <key1> <key2>:返回两个集合中的元素并集

        10.sdiff <key1> <key2>:返回两个集合的元素差集(key1中的,不包含key2)

数据结构

        set的数据结构是dict字典,字典是用hash表实现的

ZSet有序集合

简介

        Redis有序集合zset 与普通集合set非常相似;

        Zset是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分( score) ,这个评分( score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了。

常用命令      

        1.zadd <key><score1><value1><score2><value2>... :将一个或多个member元素及其score值加入到有序集key当中。
        2.zrange <key><start><stop>[WITHSCORES]:返回有序集key中,下标在<start><stop>之间的元素
        3.zrangebyscore key min max [withscores] [limit offset count]:返回有序集 key 中,所有score值介于min和max 之间(包括等于min或max )的成员
        4.zincrby <key><increment><value>:为元素的score加上增量

        5.zrem <key><value>:删除该集合下,指定值的元素v
        6.zcount <key><min><max>:统计该集合,分数区间内的元素个数。
        7.zrank <key><value>:返回该值在集合中的排名,从0开始。

数据结构

        zset底层使用了两个数据结构。

        (1) hash , hash 的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到相应的score值。

        (2)跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表。

新数据类型

BitMaps

简介

        BitMap可以理解为存储bit的数组,多个bit存储后组成的一个特定结构,每个位置只能存储1和0

常用命令

        1.setbit <key> <offset> <value>:设置bitmap中的值,指定offset,即下标,从0开始

        2.get <key> <offset>:获取bitmap的值,指定offset下标,有则返回1,没有则返回0,不存在的下标也返回0

        3.bitcount <key> [start end]:统计设置为1的bit数量,可以指定获取的范围

        4.bitop <operation> <destkey> <keys...>:bitop可以进行多种操作是一个复合操作, 它可以对多个Bitmaps做and(交集) 、 or(并集) 、 not(非) 、 xor(异或) 等操作,将结果保存在目标destkey中

注意

        需要注意一点,所说Bitmaps能够节省内存,但是并不适用所有情况。

        假设网站有1000万用户,但是其中的活跃用户只有10万。此时Bitmaps存储了绝大多数的僵尸用户,但是bit位的值都是0,是无效的,只有百分之一的利用率,还是浪费了绝大部分的内存。

        而如果使用map或者set存储这10万用户,可能还用不了这么多内存

HyperLogLog

简介

        HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的

常用方法

        1.PFADD <key> element [element …]:添加

        2.PFCOUNT  <key>:获得基数值

        3.PFMERGE <key1> <key2>:  合并多个key值

Geospatial

简介

        地理空间(geospatial),主要用在需要地理位置的应用上。将指定的地理空间位置(经度、纬度、名称)添加到指定的 key 中,这些数据将会存储到 sorted set;推算地理位置的信息,两地之间的距离,周围方圆的人等等场景都可以用它实现

常用方法

        1.geoadd key longitude latitude member [longitude latitude member …]:添加地理位置,可以将指定的地理空间位置(经度、纬度、名称)添加到指定的 key 中

        2.geopos key member [member …]:获取指定城市的地理位置经纬度,可以从 key 里返回所有给定地理位置的经纬度

        3.geodist key member1 member2 [unit]:返回两个坐标之间的距离,也就是两个人之间的距离(指定单位的参数 unit)

        4.georadius key lopngitude latitude radius unit [WITHCOORD] [WITHDIST] [COUNT count] [ASC|DESC] […]:以给定的经纬度为中心,返回与中心的距离不超过给定最大距离的所有位置元素

        5.georadiusbymember key member radius unit […(跟 georadius 一致)]:都可以找出位于指定范围的位置元素,但是这里不是指定中心点坐标,而是指定以哪个元素为中心点

        6.geohash key member [member …]:将二维的经纬度转换成一维的字符串,也就是对经纬度进行 hash 计算

数据结构

        geo 底层原理是使用 zset来实现的,因此我们也可以使用 zset 的命令操作 geo

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值