Redis6之数据类型

常见数据类型

String字符串

简介

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

常用命令

        1.set :添加键值对

        2.get :查询对应键值对

        3.append :将给定的值添加到原值的末尾

        4.strlen :获取值的长度

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

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

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

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

        9.mset ...:同时设置多个键值对

        10.mget ...:同时获取多个value        

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

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

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

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

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

数据结构

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

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

List列表

简介

        单键多值;

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

常用命令

        1.lpush/rpush ....,:从左边或者右边插入一个或多个值

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

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

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

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

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

        6.llen :获取列表长度

        7.linsert before :在后插入

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

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

数据结构

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

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

Hash哈希

简介

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

常用命令

        1.HDEL field2 [field2]:删除一个或多个hash字段。
        2.HEXISTS field:确定hash字段是否存在。
        3.HGET field:获取存储在指定键处的hash字段的值。
        4.HGETALL :获取按指定键存储在hash中的所有字段和值
        5.HINCRBY field increment:将哈希字段的整数值递增到给定的数字
        6.HINCRBYFLOAT field increment :将哈希字段的浮点值按给定的量递增
        7.HKEYS :获取hash中的所有字段
        8.HLEN :获取hash中的字段数
        9.HMGET field1 [field2] :获取所有给定哈希字段的值
        10.HMSET field1 value1 [field2 value2 ] :将多个哈希字段设置为多个值
        11.HSET field value:设置hash字段的字符串值
        12.HSETNX field value :仅在hash字段不存在时设置该字段的值
        13.HVALS :获取hash中的所有值
        14.HSCAN 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 :将一个或者多个元素加入到集合中,已经存在的被忽略

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

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

        4.scard :返回集合个数

        5.srem ...:删除集合中的某个元素

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

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

        8.smove :返回两个集合中的元素交集

        9.sunion :返回两个集合中的元素并集

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

数据结构

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

ZSet有序集合

简介

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

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

常用命令      

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

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

数据结构

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

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

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

新数据类型

BitMaps

简介

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

常用命令

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

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

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

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

注意

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

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

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

HyperLogLog

简介

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

常用方法

        1.PFADD element [element …]:添加

        2.PFCOUNT  :获得基数值

        3.PFMERGE :  合并多个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

你可能感兴趣的:(redis,java,sql)