Bootstrap

Redis的数据类型

1、五种常见的数据类型

              String

                        String类型的三种格式

                                字符串

                                int

                                float

                             注意:字符串类型的最大空间不能超过512m   

                         String类型常见的命令  

                                 SET:添加或者修改已经存在的一个String类型的键值对

语法格式:

         set key value 

                例子: set name tian

                                 GET:根据key获取String类型的value

语法格式

         get key

               例子 > get name
                           "tian"

                                 MSET:批量添加多个String类型的键值对

语法格式

         mset key value [key value ...] 

                例子>mset age 12 add 河南

                                 MGET:根据多个key获取对应的String类型的value

语法格式

        mget key [key ...]

        例子>mget age add
                1) "12"
                2) "河南"

                                 INCR:让一个整型的key自增1

语法格式 

        incr key

            例子>incr age
                     13

                                 INCRBY:让一个整形的key自增并指定步长

语法格式

        incrby key increment

                例子> incrby age 2
                           15

                                 INCRBYFLOAT:让一个浮点类型的数字自增并指定步长

语法格式

        incrbyfloat key increment

               例子>incrbyfloat money 1
                        11

                                SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行 【使用场景:分布式锁】

语法格式

         setnx key value

                例子> setnx a 123
                          1

                                SETEX:添加一个String类型的键值对,并且指定有效期

语法格式

         setex key seconds value
               例子> setex b 10 123 
                          OK

 10秒之后会自动删除b

                        使用场景

                                 计数功能,验证码存储,分布式锁等等

              Hash

                     以键值对的方式设置数据,值的内容是hash数据。hash对应java中的map集合。

                     常用命令   

                             hset: 设置单个键值对

语法格式

                 hset key field value  key代表着对象 field代表属性 value代表属性值 

                例子> hset userInfo name tian
                           1

                             hget:  获取单个键对应的值

语法格式

                 hget key field

                例子> hget userInfo name
                           tian

                             hmset: 批量设置键值对

语法格式

         hmset key field value [field value ...]

         例子>hmset userInfo age 23 address 河南
                   OK

                

                              hmget:批量获取键值对

语法格式

         hmget key field [field ...]

        例子> hmget userInfo name age address 
                   tian
                   23
                   河南

                              hgetall:  获取某个键的所有键值对数据

语法格式

         hgetall key
        例子>hgetall userInfo
                name
                tian
                age
                23
                address
                河南

                              hdel:  删除某个键值对数据

语法格式        

         hdel key field [field ...]
        例子> hdel userInfo address
                  1

                              hkeys: 获取所有的键

语法格式

        hkeys key
        例子> hkeys userInfo
                   name
                   age

                               hvals: 获取所有的值

语法格式

        hvals key
        例子> hvals userInfo
                tian
                23

                               hlen: 获取键值对的个数

语法格式

        hlen key
        例子> hlen userInfo
                  2

                                del键: 删除redis键数据

语法格式

         del key [key ...]
         例子> del userInfo
                      1

                       使用场景 

                                用来存储各种资源信息。如:用户信息,部门信息,订单信息等等

       

              List

                     以键值对方式存储数据,值的部分是一个list列表。值允许重复,数据可以通过索引来获取。

                      常见的命令  

                                lpush:从左边添加数据

语法格式

        lpush key value [value ...]

        例子>lpush userInfo 1 2 3
                  3

                                rpush:从右边添加数据

语法格式

        rpush key value [value ...]
        例子>rpush userInfo 4 5 6
                  6

                                lpop:从左边弹出数据

语法格式

         lpop key

         例子> lpop userInfo        
                    3

                                rpop:从右边弹出数据

语法格式

         rpop key

         例子> rpop userInfo        
                    6

                                llen:返回列表长度

语法格式

         llen key

         例子> llen userInfo        
                    4

                                lindex:返回列表中指定索引位置的数据【索引为-1,表示获取最后一个值】

语法格式

         lindex key index
         例子> lindex userInfo 2
                    4

                      使用场景  

                           存储各种列表。如:粉丝列表,主播列表,消息列表等等

              Set

                        以键值对方式存储。值的部分是一个set集合。值没有次序,不允许重复

                        常用命令

                                sadd:以特定键添加一组set数据

语法格式

        sadd key member [member ...]
        例子>sadd car 12
                 1

                                srem:删除特定数据

语法格式

         srem key member [member ...]
          例子>srem car 12
                    1

                                smembers:返回set中的所有元素

语法格式

         smembers key

         例子> smembers car
                        12
                        14
                        15

                        18

                                sismember:测试set中是否存在某个值

语法格式

        sismember key member

        例子> sismember car 10
                   0  //不存在
                > sismember car 12
                    1  //存在

                                scard:返回set中值的个数

语法格式

        scard key
        例子>scard car
                  4

                                spop:随机弹出(删除)一个或多个值

语法格式

         spop key [count]

         例子> spop car  //count不写默认是1 随机弹出一个
                    18   

         例子>spop car 2 //随机弹出两个值
                  15
                   12

                                srandmembeer:随机返回set中的值

语法格式

         srandmember key [count]

         例子> srandmember car //count不写默认是1 随机返回一个
                    14

         例子>srandmember car 2  随机返回两个值
                 14
                  4

                                sinter:求两个或多个set的交集

语法格式

        sinter key [key ...]

        例子>sinter car car2
                        2
                        3
                        4

                                sinterstore:将一个set的值或多个交集的结果,存储到另一个 set中

语法格式

         sinterstore destination key [key ...]

         例子>sinterstore car4 car  //将car中所有的值存储导car4中
                       4

         例子>  sinterstore car3 car car2 //将两个set交集的结果,存储到另一个 set中
                        3

                        使用场景 

                                存储不重复元素,求多个集合交集。如:共同爱好,共同粉丝等等

              SortedSet

                          以键值对方式添加数据,值的部分是set,但是每个set元素都要指定一个分数(权重\小数)  不允许重复,按照权重排序

                         常用命令

                                zadd:添加一组set数据

语法格式   

           zadd key [NX|XX] [CH] [INCR] score member [score member ...]

           例子> zadd score 12 tian 100 run 
                     2

                                zrem:删除一个数据

语法格式

          zrem key member [member ...]
          例子> zrem score tian
                        1         

                                zcard:统计元素个数

语法格式

        zcard key

        例子>  zcard score
                        1 

                                zcount:统计某个范围(分数)的元素个数

 语法格式

          zcount key min max

          例子> zcount cat 1 3
                    2

                                zrangebyscore:返回指定分数范围的元素内容

语法格式

        zrangebyscore key min max [WITHSCORES] [LIMIT offset count]

        例子> zrangebyscore cat 1 3
                   1

                               zrange:返回有序集key中,在指定区间内的成员。其中成员的位置按score值从小到大来排序。具有相同score值的成员按字典序来排序。

语法格式

          zrange key start stop [WITHSCORES]
          例子>   zrange cat 1 3
                        3
                        5

                                zscore:返回指定键的分数

语法格式

        zscore key member
        例子>  zscore score run
                   100

                         使用场景       

                                排行榜、弹幕消息、地理位置相关的等等

2、三种特殊的数据类型

             GEO

                     基于sorted set数据结构实现的,利用geohash算法将经度和纬度编码为二进制字符串,并作为sorted set的score值

                   常用命令

                          geoadd:将一个或多个地理空间位置(经度、纬度、名称)添加到指定的key中

语法格式

        geoadd key longitude latitude member [longitude latitude member ...]

        例子> geoadd  coordinate  112.42  34.16  "河南"
                   1

longitude经度 【取值范围在-180~180】

latiude纬度     【取值范围-85.05112878~85.05112878】

                          geopos:返回一个或多个地理空间位置的经度和纬度

语法格式

        geopos key member [member ...]
        例子> geopos coordinate "河南"
                  112.41999775171279907
                  34.15999982501106302

                          geodist:返回两个地理空间位置之间的距离,可以指定单位(m,km,mi,ft) 

语法格式

         geodist key member1 member2 [unit]      【unit值有m、km、ft(英尺)、mi(英里) 】

         例子> geodist coordinate "河南" "洛阳"  【默认是m】
                        206080.3684

                >geodist coordinate "河南" "洛阳" km
                        206.0804

                          georadius:返回指定圆心和半径内的地理空间位置,可以指定返回坐标、距离、哈希值、数量、排序方式等,也可以将结果存储到另一个key中

语法格式

        georadius key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST]                 [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
         例子>georadius coordinate 115 34 400 km  【不带参数的只返回属性】
                        洛阳
                        河南

          例子> georadius coordinate 115 34 400 km withcoord  【withcoord参数表示查询的数据带有经度和纬度】
                        洛阳
                        112.1600005030632019
                        32.32000011046604726
                        河南
                        112.41999775171279907
                        34.15999982501106302

            例子>georadius coordinate 115 34 400 km withdist  【withdist参数表示到该坐标的距离】
                        洛阳
                        323.7739
                        河南
                        238.3386

            例子>   georadius coordinate 115 34 400 km withhash  【withhash 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。】
                         洛阳
                        4040354143677915
                        河南
                        4040687585057773
 

  • WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。
  • WITHCOORD: 将位置元素的经度和纬度也一并返回。
  • WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。
  • COUNT 限定返回的记录数。
  • ASC: 查找结果根据距离从近到远排序。
  • DESC: 查找结果根据从远到近排序。

                         geohash:保存地理坐标

语法格式

        geohash key member [member ...]
        例子>geohash coordinate "洛阳"
                  wmxzb78mtk0

                          georadiusbymember:返回指定成员为圆心的指定半径内的地理空间位置,可以指定返回坐标、距离、哈希值、数量、排序方式等,也可以将结果存储到另一个key中           

语法格式

         georadiusbymember key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
        例子>georadiusbymember coordinate "洛阳"  300 km 【找出以洛阳 为中心半径300km范围的城市】
                洛阳
                河南

                   使用场景     

                        地理位置搜索、分析和展示。如地图应用、导航应用、位置服务应用等

                        统计某个区域内的商家或用户数量

                        查询某个位置附近的餐馆或酒店

                        计算两个位置之间的距离或行驶时间

                        显示某个位置周围的景点或活动

             BitMap  

                        bitmap类型的底层实现是SDS(simple dynamic string)和String类型相同,只是在操作时会将每个字节拆分成8个二进制位,是一种独特的String类型,它可以将一个String类型的值看做是一个由二进制组成的数组。一个bitmap类型的键最多可以存储2^32-1

                        常用命令

                                setbit 设置或清除指定偏移量上的位(bit)

语法格式

        setbit key offset value
        例子> setbit  activeCount 1 0
                        1

                                 getbit  获取二进制串某一位上面的value

语法格式

           getbit key offset

         例子>getbit  activeCount 1
                    0

                                bitop 主要对多个对应key的二进制串的值做and,or,xor, not操作

语法格式       

             bitop operation destkey key [key ...]     【operation :and、or、xor、not】

             例子>  bitop and sum activeCount activeCount1
                        1

                                 bitcount 统计某一个二进制串里面1的个数

语法格式

        bitcount key [start end]
        例子> bitcount sum 0 3
                   0

                                bitpos 用来查询一个二进制串里第一个0或者1的位置。

 语法格式

         bitpos key bit [start] [end]
         例子>bitpos  sum 0 1 3
                  -1

                        应用场景

                                统计用户活跃度,利用setbit和bitcount命令实现每天或每个月用户登录次数的统计

                                实现布隆过滤器,利用setbit和getbit命令实现快速判断一个元素是否存在于一个集合中

                                实现位图索引,利用bitop和bitpos命令实现对多个条件进行位运算和定位

                                设置黑白名单

             HyperLog

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

                        常用命令

                                pfadd 添加指定元素到HyperLog

语法格式

        pfadd key element [element ...]
        例子> pfadd runoobkey redis
                        1

        例子>pfadd runoobkey mongodb mysql
                        1

                                pfcount 返回给定HyperLog的基数估算值

语法格式

         pfcount key [key ...]

        例子> pfcount runoobkey
                        3

                                pfmerge 将多个HyperLog合并为一个

语法格式

        pfmerge destkey sourcekey [sourcekey ...]
        例子> pfmerge runnoobkey2 runnoobkey runnoobkey1
                        OK

                应用场景

                        基数统计

;