Redis 键管理与小功能

时间:2022-07-22
本文章向大家介绍Redis 键管理与小功能,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一、单个键管理 针对单个键的命令,有type、del、object, exists, expire等,下面介绍几个重要的 键的重命名

Rename key newkey
192.168.1.10:6379> set python jedis
OK
192.168.1.10:6379> get python
"jedis"
192.168.1.10:6379> rename python java
OK
192.168.1.10:6379> get python
(nil)
192.168.1.10:6379> get java
"jedis"

随机返回一个键

Randomkey
192.168.1.10:6379> randomkey 
"a"
192.168.1.10:6379> randomkey 
"user:1_2:inter"

dbsize查看多少个键

192.168.1.10:6379> dbsize 
(integer) 24

键过期 expkeat时间戳按秒换算的时间戳

192.168.1.10:6379> expireat hello 1469980800 
(integer) 1 
192.168.1.10:6379> expire not_exist_key 30 
(integer) 0 
192.168.1.10:6379> set hello world 
OK 
192.168.1.10:6379> expire hello -2 
(integer) 1 
192.168.1.10:6379> get hello 
(nil)

tt値:大于等于0的整数:键剩余的过期时间 -1:键没有设置过期时间 -2:键不存在

迁移键

Move Dump + restore Migrate

Move Move key db用redis库和库内部进行迁移0-15个库 Dump + restore

Dump key和restore key ttl value多个red is之囘进行数据迁移分2步: 1、在Bredis, dump序列化备份,格式rdb 2、在目标redis上,restore将上面序列化的值进行复原,ttl过期时间ttl=O没有过期时间

.

注意: 1整个迁移过程并非原子性 2迁移的过程开启了两个客户端连接

源redis :

127.0.0.1:6379> set hello world 
OK 
127.0.0.1:6379> dump hello
 "x00x05worldbx00xa0xfcxd0;yxb0xf8xfa"

目标redis

127.0.0.1:6379> select 15
OK
127.8.0.1:6379[15]> restore hello 0"x00x05worldbx00xa0xfcxd0;yxb0xf8xfa"
OK

Migrate 3 0.6版本以后的才有,3.0.6版本之前的没有 Dump+restore+del 具有原子性 Migrate host port key | “ ” destination-db timeout [copy] [replace] [keys key[key..]] Host 目标 redis 的ip Port目标redis的端口 Key|" "迁移的键,可以是多个键 Destination-db目标redis的数据库的索引(索引就是数据库的编号0-15) Timeout迁移的超时时间(单位为毫秒) [copy]迁移后并不删除原数据 [Replace]如果使用replace, migrate不管目标redis是否存在该键都会正常迁移进行数据覆盖(迁移多个键时, 把replace放在keys前面) [keys key[key..]表示迁移多个键,多余迁移1个键的写这里

命令

作用域

原子性

是否支持多个键

Move

redis内部

不支持

Dump+restore

redis之间

没有

不支持

Migrate

redis之间

支持

遍历键 Keys patten

Keys *
192.168.1.10:6379> keys * 
1) "c" 
2) *user: 1: follow1' 
3) "listkey" 
4) "user:ranking:l_union_2*’ 
5) "hashkey" 
6) "myset" 
7) "user:ranking:1M 
8) "key" 
9) "a"

'匹配任意字符 ?匹配1个字符 []匹配部分宇符[1,3]代表1和3 [1-10]代表1到10的任意数字 x用来做转义 以j或r开头edis结尾的键

有3种情况使用keys 1、不对外提供服务的redis节点上 2、确认键值总数数是较少,可以用keys 3、用scan防止阻塞

scan 渐进式的遍历2.8版本才有,相当于1个keys = 多个scan Scan cursor [match pattern] [count number] C ursor实际上curso「是一个游标,第一次遍历从0开始,每次scan遍历完都会返回当前游标的值,直到游标的值 为0,表示遍历结束 [match pattern]可选项,作用是做模式的匹配 [count number]可选项,作用是表明每次要遍历的键的个数,默认是10个 Scan 0开始 缺点:Scan不能保证完整的遍历出所有的键

192.168.1.10:6379> scan 0 
1) "30"
2) 1) "user:ranking:l_union_2"
    2) "user:1_2:interM 
    3) "c” 
    4) "user:1:follow" 
    5) "myset"
    6) "zsetkey" 
    7) "b" 
    8) "user:ranking:2" 
    9) "user:ranking:1_inter_2"
    10)  "user:ranking”
192.168.1.10:6379> scan 30 
1) "23"
2) 1) "d" 
    2) "mylist" 
    3) "zhangyi" 
    4) "user:2:follow" 
    5)  "a" 
    6) "listkey" 
    7) "user:ranking:1" 
    8) "key" 
    9)  "setkey" 
    10)  "hashkey"
192.168.1.10:6379> scan 23 
1) "0”
    1) "java"
    2) "user:1" 
    3) "redis"

数据库管理 1、切换数据库

Select dblndex
192.168.1.10:6379> select 15
OK

2、flushdb/flushall

192.168.1.10:6379[15]> dbsize 
(integer) 0
192.168.1.10:6379[15]> set a b
OK 
192.168.1.10:6379[15]> dbsize 
(integer) 1 
192.168.1.10:6379[15]> flushdb 
OK 
192.168.1.10:6379[15]> dbsize 
(integer) 0

二、小功能之慢查询分析 慢查询分析 许多存储系统(例如MySQL)提供慢查词日志帮助开发和运维人员定位系统存在的慢操作。所谓慢查词曰志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值, 就将这条命令的相关信息(例如:发生时间,耗时,命令的详细信息)记录下来,Redis也提 供了类似的功能。 慢查询的两个配置参数

Slowlog-log-slower-then :预设阀值(单位:微秒,1 秒=1000毫秒=1000000微秒) 预设阀值=0 ,记彔所有 预设阀值<0 ,任何命令都不会进行记录

Slowlog-max-len :慢查词日志最多存储多少条 若慢查词曰志存满时,再有曰志记彔时,则删除最早的一条,依次按此执行 命令 (1)获取慢查词曰志

192.168.1.10:6379> slowlog get 
(empty list or set)

(2)获取慢查词曰志列表当前的长度

192.168.1.10:6379> slowlog len 
(integer) 0

(3)慢查词日志重置

192.168.1.10:6379> slowlog reset 
OK

Redis Shell Redis-cli详解 [-r]:代表将命令执行多次

[rootglocalhost redis-4.0.2]# redis-cli -r 3 ping 
PONG 
PONG 
PONG

[-i]:代表每个几秒执行一次命令,但是-i必须和-r-起使用

[rcotglocalhost redis-4.0.2]# redis-cli -r 5 -i 1 ping 
PONG
PONG 
PONG 
PONG 
PONG

[-x]:从标准输入(stdin)读取数据作为redis-cli的最后参数 将world作为键hello的值

[rootglocalhost redis-4.0.2]# echo "world" | redis-cli -x set hello
OK

[-c]:该选项是连接redis cluster节点时需要使用的,-c选项可以防止moved和ask异常 [-a]:动输入auth命令 [--scan]用于扫描指定模式的键 [--slave]把当前的客户端模拟当成redis节点的从节点,来获取redis节点的更新 [--pipe]用于执行流水线,将命令封装成redis通信协议定义的数据格式,批畺发送给redis执行 [--rdb]用于拍快照(ao肥快照保存在磁盘),备份,请求redis实例生成并发送RDB持久化文件,保存在本地 [--eval]执行指定的lua脚本(与魔兽世界脚本相同) [--latency】查词延迟,包含以下3点 [--latency]该选项可以测试客户端到目标red is的网络延迟,结果只有一条 [--latency-history]分时段的形式了解延迟信息 [--latency-dist]使用统计图形式从控制台输出延迟统计信息 [--stat]选项可以实时获取redis的重要统计信息(info不是实时的)

[root@localhost redis-4.0.2]# redis-cli --stat 
------data---------------------------------load-----------------child----
keys               mem         clients blocked requests         commections
11                   829.17K    2           0           136 (+0)         6
11                   829.17K    2           0           136 (+1)         6
11                   829.17K    2           0           136 (+1)         6
11                   829.17K    2           0           136 (+1)         6
....

【redis-server详解】 [-test-memory 1024]是否有内存问题造成的内存崩溃,可以用来检测当前操作系统是否稳定的分配指定容是的内存给redis

[rootglocalhost src]# redis-server --test-memory 1024

[redis-benchmark]可以为redis做基准新能测试,为开发和运维提供方便,做测试使 [-c]代表客户端的并发量(默认50) [-n]-n后面跟数星,代表客户端请求总畺(默认为100 000) [-q]仅仅显示requests per second (请求数是,秒,等信息)信息 [-r]在一的redis上执行redis-benhmark,并向redis里面插入更多随机键 [-P]每个请求pipe流水线的数据畺(默认为1) [-k]代表客户端是否使用keepalive, 1为使用,0为没试用,默认是1

Pipeline Redis提供了批畺操作命令(例如mget, mse痒),有效地节约RTT,但大部分命令是,不支持批畺操作的,比如要执行n次hgetall命令,并没有mhgetall命令存在,需要消耗,n次RTT, Redis的客户端和服务端可能部署在不 同的机器上。比如客户端在北京,Redis服务端在上海,两地直线距离约为1300公里,那么1次RTT时间-1300 x 2/ ( 300000 x 2/3)=13毫秒(光在真空中传输速度为每秒30万公里,这里假设光纤为光速的2/3),那么客户端在1 秒内大约只能执行80次左右的命令,这个和Redis的高并发高吞吐特性背道而驰。 Pipeline (流水线肌制能改善上面这类问题。它能将一组Redis命令进行组装,通过一次RTT传输给Redis,再将 这组Redis命令的执行结果按顾序返回给客户端。

事务 为了保证多条命令组合的原子性,Redis提供了简单的事务功能以及集成Lua脚本来解决这个问题。本节首先简 单介绍Redis中事务的使用方法以及它的局限性,之后重点介绍Lua语言的基本使用方法。 熟悉关系型数据库的同学应该对事务比较了解,简单地说,事务表示一组动作,要么全部执行,要么全部不执 行。比如在社交网站上用户A关注了用户B,那么需要在用户A的关注表中加入用户B,并且在用户B的粉丝表中添加用户A,这两个行为要么全部执行,要么全部不执行,否则会出现数据不一致的情况。 Redis提供了简单的事务功能,将一组需要一起执行的命令放到multi和exec两个命令之间。multi命令代表事务开 始,exec命令代表事务结束,它们之间的命令是原子顺序执行的,例如下面操作实现了上述用户关注问题。

192.168.1.10:6379> multi 
OK 
192.168.1.10:6379> sadd user:a:follow user:b 
QUEUED 
192.168.1.10:6379> sadd user:b:follow user:a 
QUEUED

可以看到sadd命令此时的返回结果是QUEUED,代表命令并没有真正执行,而是暂时 保存在Redis中。如果此时另一客户端执行sismember user :a: follow user:b返回结果应该为0。

192.168.1.10:6379> sismeinber user:a:follow user:b 
(integer) 0

只有当exec执行后,用户A关注用户B的行为才算芫成。

192.168.1.10:6379> multi 
OK 
192.168.1.10:6379> sadd user:a:follow user:b 
QUEUED 
192.168.1.10:6379> sadd user:b:follow user:a 
QUEUED 
192.168.1.10:6379> exec 
1) (integer) 1 
2) (integer) 1 
192.168.1.10:6379> sismember user:e:follow user:b 
(integer) 1

如果要停止事务的执行,可以执行discard命令代替exec命令

192.168.1.10:6379> discard 
OK 
192.168.1.10:6379> sismember user:a:follow user:b 
(integer) 0

Bitmaps 数据结构模型 现代计算机用二进制(位)作为信息的基确单位,1个字节等于8位,例知"big”宇符串是由3个字节组成,但实际在 计算机存储时将其用二进制表示,,"big"分别对应ASCII码分别是98、105、103,对应的二进制分别是 0110010、01101001 和0110011。 所以 Big有3个字节 B98 01100010 I 105 01101001 G 103 01100111 许多开发语言都提供了操作位的功能,合理地使用位能够有效地提高内存使用率和开发效率。Redis提供了 Bitmaps这个“数据结构”可以实现对位的操作。把数据结构加上引号主要因为: Bitmaps本身不是一种数据结构,实际上它就是宇符串,但是它可以对宇符串的位进行操作。 Bitmaps单独提供了一套命令,所以在Redis中使用Bitmaps和使用字符串的方法不太相同。可以把Bitmaps想象 成一个以位为单位的数组,数组的每个单元只能存储0和1,数组的下标在Bitmaps中叫做偏移畺。 命令 1、设置值 设置值Setbit key offest value

192.168.1.10:6379> setbit unique:user:2000-01-01 0 1 
(integer) 0

2、获取值 getbit key offest

192.168.1.10:6379> getbit unique:user:2000-01-01 0 
(integer) 1

3、获取bitmaps指定范围值为1的个数 Bitcount [start] [end] Start和end代表起始和结束字节数

192.168.1.10:6379> bitcount unique:user:2000-01-01 0 10
 (integer) 1

4、Bitmaps间的运算 Bitop op destkey key [key ...] Bitop是一个复合操作,他可以做多个bitmaps的and (交集),or併集),not (非),xor (异或)操作比ing 讲结果保存在destkey中 5、计算Bitmaps中第一直为targetBit的偏移量 Bitpos key targetBit [start] [end] HyperLogLog HyperLogLog并不是一种新的数据结构(实际类型为字符串类型>,而是一种基数算法,通过HyperLogLog可以利 用极小的内存空间完成独SZ总数的统计,数据集可以是IP、Email. ID等。HyperLogLog提供了3个命令: pfadd, pfcount, pfmerge,比如2016-03-06的访问用户是uuid-1, uuid-2, uuid-3, uuid-4, 2016-03-05的访 问用户是uid-4, uuid-5, uuid-6, uuid-7. 1、添加 Pfadd key element [element...] pfadd用于向HyperLogLog添加元素

192.168.1.10:6379> pfadfl 2016_03_06:ur>ique:ids "uuid-1" "uuid-2"
 (integer) 1

2,计算独立用户数 Pfcount key [key. ..]用于计算一个或多个HyperLogLog的独立总数

192.168.1.10:6379> pfcount 2016_03_06:unique:ids 
(integer) 2

3、合并 pfrnerge destkey sourcekey [sourcekey . ] pfmerge可以求出多个HyperLogLog的并集并赋值给 destkey

192.168.1.10:6379> pfcount 2016_03_05_06:unique:ids 
(integer) 0

发布订阅 Redis提供了基于"发布/订阅'模式的消息机制,此种模式下,消息发布者和订阅者不 进行亘接通信,发布者客户端向指定的频道(channel)发布消息,订阅该频道的每个客户端都可以收到该消息。 命令 1、发布消息 publish channel message 2、订阅消息

192.168.1.10:6379> subscribe channel [channel...]

3、取消订阅

192.168.1.10:6379> unsubscribe [channel [channel...]]

4、按照模式订阅和取消订阅

192.168.1.10:6379> psubscribe [pattern [pattern . ..]] 
192.168 1.10:6379> punsubscribe [pattern [pattern +_+]]

5、查询订阅 (1)、查看活跃的频道数

192.168.1.10:6379> pubsub channel [argument [argument...]]

(2)、查看频道订阅数

192.168.1.10:6379> pubsub numsub [argument [argument.]]

(3)、查看模式订阅数

192 168 1.10:6379> pubsub numpat [argument [argument...]]

GEO Redis 3.2版本提供了GEO (地理信息定位)功能,支持存储地理位置信息用来实现诸如附近位置、摇一摇这类依 赖于地理位置信息的功能,对于需要实现这些功能的开发者来说是一大福昔。GEO功能是Redis的另一位作者 Mat Stancliff借鉴NoSQL数据库Ardb实现的,Ardb的作者来自中国,它提供了优秀的GEO功能,

1、增加地理位置的信息 Geoadd key longitude latitude member 2、获取地理位置的信息 Geopos key memberl member2 3、获取2个地理位置的距离 Geodist key memberl member2 [unit] unit取值范围:m米|km公里|mj英里|ft尺 4、获取指定位置范围内的地理信息位置集合 (1) 以经S度返回的信息 Georadius key longitude latitude randiusm|ft|mi [withcoord] [withdist] [wothhash] [COUNT count] [asc|desc] [store key] [storedist key] (2) 以城市名返回的信息 Georadiusbymember key longitude latitude randiusm|ft|mi半径带单位[withcoord]返回的结果中包含经纬度 [withdist]返回的结果中包含离中心节点位置的距离[wothhash] [COUNT count]指定返回结果的数星[asc|desc] 离中心节点的距离升序或降序[store key] [storedist key]返回的结果离中心节点的距离保存到指定的键当中

randiusm|ft|mi半径带单位 [withcoord]返回的结果中包含经抹度 [withdist]返回的结果中包含离中心节点位置的距离 [wothhash]获取geohash :将二维的经讳度转换为一堆的字符串 [COUNT count]揩定返回结果的数畺 [asc|desc]离中心节点的距离升序或降序 [store key] [storedist key] 一起的,返回的结果离中心节点的距离保存到指定的键当中

5、获取geohash 将二维的经讳度转换为一维的字符串 (字符串越长,地理位置越精确,宇符串越接近,地理位置越接近) Geohash key member [member.….] 算出的结果是zset类型: type cilies:locations