Bootstrap

redis进阶的使用

目录

注意事项:

0、getrange

1、sorted set

2、list的应用

3、bit的应用

4、lua脚本

5、对象类型和编码方式

6、GEO地理位置应用

7、stream

8、安全


注意事项:

1、hset 的子key时无法设置过时时间的,只能对大key设置过期时间

0、getrange

1、sorted set

zadd test-zadd 15 key1  712 key2 1515 key3  41 key4       --增加test-zadd的有序结合,并为集合添加key1的值

zrange test-zadd 0 10 [withscores]                                     - 从小到大到排序输出前11个的集合

zrevrange   test-zadd 0 10 [withscores]                             -- 从大到小排序输出前11个集合

zcard test-zadd

zcount test-zadd

zrank test-zadd key3                                                             --  获取有序集合的索引

zrangebyscore  test-zadd 1 200 [withscores] [limit 0 1]         -- 查找给定范围值的集合

 

zincrby test-zadd 1 key5                                           

2、list的应用

lpush test-push 1                                                            -- 将数据添加加队列的头部 rpush 就时尾部

lpop                                                                                   --获取指定队列的头部数据并且删除,没有就等待

 

 

3、bit的应用

setbit test-bit 1 1                                                              --设置bit的值!只能设置0和1

bitcount  test-bit  [start end]                                                        --获取test-bit "1" 的数量

 

4、lua脚本

 eval "return {KEYS[1],ARGV[1]}" 1 test-set2 12

 eval "return redis.call('set','test-set3',3)" 0                                 #redis.call返回调用者的一个错误

                                                                                                                      redis.pcall错误已lua表的形式返回

 

错误返回

eval "return redis.pcall('set',KEYS[1],KEYS[2])" 2 test4 4

 evalsha "0fe98c355c13252efc0f8e931a2e42076d4d1282" 0

script flush                                                #清除所有脚本缓存 !一般人不会去这么做的

script exists 校验码                                    #检验校验码是否存在

script load 脚本                                         #讲一个脚本加入缓存

script kill                                                    #杀死正在运行的脚本

 

注意:redis和lua的类型转换

 

5、对象类型和编码方式

int:8个字节的长整型。

embstr:小于等于39字节的字符串  #由于embstr是只读,所以进行修改时一定会变成 -> raw

raw:大于39字节的字符串

!注意:redisObject长度是16字节、sds长度是9字节 39 + 16 + 9 = 64 作用后面讲

 

list、sort set、set、hash 编码格式受下面两个参数的影响:

hash-max-ziplist-entries 512                      #最大key的个数      !测试过程中256较佳
hash-max-ziplist-value 64                           #最大键值长度        !1024

zset-max-ziplist-entries 128                        # zset的key最大个数

zset-max-ziplist-value 64                             # zet的key最大个数

set-max-intset-entries 512                          # set的键值的长度

 

 

6、GEO地理位置应用

 添加经纬度到某个key

geoadd hongong 114.191347 22.257719  1  

 返回给定两个位置的距离

geoadd china 114.191347 22.257719  hongkong
geoadd china 114.056093 22.537316 shenzhen
geodist china hongkong shenzhen km

# 结果:"34.0670"

获取给定位置半径内某个key 的所有位置元素

geoadd china 114.191347 22.257719  hongkong
geoadd china 114.056093 22.537316 shenzhen
# georadius  key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
georadius china 114.079439 22.469122 40 km withcoord
# 结果:
# 1) 1) "hongkong"
#    2) "26.1798"
# 2) 1) "shenzhen"
#    2) "7.9552"
georadius china 114.079439 22.469122 40 km withcoord
#结果:
# 1) 1) "hongkong"
#    2) 1) "114.19134467840194702"
#       2) "22.25771981598777671"
# 2) 1) "shenzhen"
#    2) 1) "114.05609160661697388"
#       2) "22.53731476818982316"

从key里面返回获取给定位置的(经度和纬度)

geoadd china 114.191347 22.257719  hongkong
geoadd china 114.056093 22.537316 shenzhen
geopos china hongkong shenzhen none
# 结果
# 1) 1) "114.19134467840194702"
#    2) "22.25771981598777671"
# 2) 1) "114.05609160661697388"
#    2) "22.53731476818982316"
# 3) (nil)

从key里面获取某个成员位置半径范围内的所有位置数据

georadiusbymember china hongkong 40 km
#结果
# 1) "hongkong"
# 2) "shenzhen"

7、stream

xadd <key> <ID> field name  [ield name ...]
# 说明:
# 1、* 代表ID由redis自动为我们生成ID。需要显式指定ID的情况非常少见。
# 2、* Id的组成:<millisecondsTime>-<sequenceNumber>
xadd stream-test * name xiaoliao pwd 123456   -- 向stream中添加条目
xadd stream-test-num 1-2 name xiaoliao pwd 123456 -- 显示指定ID向stream添加条目

xlen <key>                                
xlan tream-test                               -- 查看stream的条目数量

xrange <key> start end [count num]     

xrevrange <key> start end [count num]     
# 说明:
# 1、- :代表最小ID
# 2、+ :代表最大ID
xrange stream-test - + count 2                                             --  获取前面两个条目

xrange stream-test  1568166601240-0 1568166601240-0  --  获取ID范围间的条目

xrange stream-test 1568169363190 1568173028006         --  获取时间戳范围的条目
 

xread [count num] [block milliseconds]  <streams key> ID  [ID ...]

说明:

1、$:代表已经存储的最大ID作为最后一个ID

2、millisecond的0:代表永久阻塞

xread block 10000 streams stream-test $                        -- 阻塞获取最后一个条目

xgroup create key groupname id-or-$

xgroup setid key id-or-$

xgroup setid key id-or-$

xgroup destroy key groupname

xgroup delconsumer key groupname consumername

xgroup create stream-test xiaoliao $

 xreadgroup group groupname consumer [count num] [block milliseconds]  streams key [key ...] ID [ID ...]

说明:

1、> :消息到目前为止从未传递给其他消费者

2、不指定count : 会读取所有未读取的消息

 xreadgroup group group-test xiaoliao  block 0 streams stream-test >

 xack key groupname ID  -- 确认该消息已处理,不再是历史待处理消息

xack stream-test group-test 1568181147074-0

 xpending key groupname  [start-id end-id count] [consumer]    -- 获取xreadgroup 但未ack的消息(即待处理消息总数)

说明:

1、返回:待处理消息总数、待处理消息start-id、待处理消息end-id

 xpending stream-test group-test

 xclaim key groupname consumer min-idle-time-ms ID [ID...]

xclaim  stream-test group-test alice2 10000 1568178958105-0                          - 获取ID为1568178958105-0 的消息

 xinfo stream key

xinfo groups key

xinfo consumers key groupname

 xinfo help

8、安全

修改redis.conf

# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
rename-command info ''
rename-command keys ''

空字符串 '' : 禁用命令

b840fc02d524045429941cc15f59e41cb7be6c52 : 将CONFIG 重命名为 b840fc02d524045429941cc15f59e41cb7be6c52

 

;