诺基亚|关于redis数据面试指南1.0——Redis的数据类型[二]!
![诺基亚|关于redis数据面试指南1.0——Redis的数据类型[二]!](https://image.uc.cn/s/wemedia/s/upload/2020/1203c1e53a1ab0c81aaed9b996cabc6a.png)
文章图片
![诺基亚|关于redis数据面试指南1.0——Redis的数据类型[二]!](https://image.uc.cn/s/wemedia/s/upload/2020/bafc41100297abd1fd218fc5b70daa94.png)
文章图片
![诺基亚|关于redis数据面试指南1.0——Redis的数据类型[二]!](https://image.uc.cn/s/wemedia/s/upload/2020/6ab15f72fb94249f1675360b3a1e54cb.png)
文章图片
![诺基亚|关于redis数据面试指南1.0——Redis的数据类型[二]!](https://image.uc.cn/s/wemedia/s/upload/2020/5be7ddf6b66212212c5b4ce4bca440db.png)
文章图片
![诺基亚|关于redis数据面试指南1.0——Redis的数据类型[二]!](https://image.uc.cn/s/wemedia/s/upload/2020/89b4e9d79d5639e8c57b8e9c583abc19.png)
文章图片
![诺基亚|关于redis数据面试指南1.0——Redis的数据类型[二]!](https://image.uc.cn/s/wemedia/s/upload/2020/f1767c60f3c8a742cc61743fc0d63375.png)
文章图片
![诺基亚|关于redis数据面试指南1.0——Redis的数据类型[二]!](https://image.uc.cn/s/wemedia/s/upload/2020/8d75e4f14d082e086a2ca646c11debe2.png)
文章图片
![诺基亚|关于redis数据面试指南1.0——Redis的数据类型[二]!](https://image.uc.cn/s/wemedia/s/upload/2020/1e2ccab47d45935ba4b373942923798a.png)
文章图片
![诺基亚|关于redis数据面试指南1.0——Redis的数据类型[二]!](https://image.uc.cn/s/wemedia/s/upload/2020/08bb1aa9ab8868d1f17a10500437f59a.png)
文章图片
![诺基亚|关于redis数据面试指南1.0——Redis的数据类型[二]!](https://image.uc.cn/s/wemedia/s/upload/2020/2756530a0910e2e8e8184ebca653839d.png)
文章图片
![诺基亚|关于redis数据面试指南1.0——Redis的数据类型[二]!](https://image.uc.cn/s/wemedia/s/upload/2020/a0a63c11cdb3969a8e84d5e0120342c8.png)
文章图片
![诺基亚|关于redis数据面试指南1.0——Redis的数据类型[二]!](https://image.uc.cn/s/wemedia/s/upload/2020/cc708beae7bbb0d5de4d3e4a816031f5.png)
文章图片
![诺基亚|关于redis数据面试指南1.0——Redis的数据类型[二]!](https://image.uc.cn/s/wemedia/s/upload/2020/742ab83059c4c095691587fcdb749b19.png)
文章图片
![诺基亚|关于redis数据面试指南1.0——Redis的数据类型[二]!](https://image.uc.cn/s/wemedia/s/upload/2020/e3fa9f1176ef533d10b7b0e545bd3b85.png)
文章图片
![诺基亚|关于redis数据面试指南1.0——Redis的数据类型[二]!](https://image.uc.cn/s/wemedia/s/upload/2020/dd0e0467edf08fc86161a2fab2074b4c.png)
文章图片
![诺基亚|关于redis数据面试指南1.0——Redis的数据类型[二]!](https://image.uc.cn/s/wemedia/s/upload/2020/8d8e2801afe12fda319178e5bfabd0f4.png)
文章图片
![诺基亚|关于redis数据面试指南1.0——Redis的数据类型[二]!](https://image.uc.cn/s/wemedia/s/upload/2020/8318fd0613ab4f4c5e4046c7e36c6439.png)
文章图片
![诺基亚|关于redis数据面试指南1.0——Redis的数据类型[二]!](https://image.uc.cn/s/wemedia/s/upload/2020/66469c4c7cbeb5767629bf5450488918.png)
文章图片
![诺基亚|关于redis数据面试指南1.0——Redis的数据类型[二]!](https://image.uc.cn/s/wemedia/s/upload/2020/b955f451fcc0658c6d7e1a6e57c9649a.png)
文章图片
![诺基亚|关于redis数据面试指南1.0——Redis的数据类型[二]!](https://image.uc.cn/s/wemedia/s/upload/2020/42163b3cfc1022e957039c5b62b0d6fb.png)
文章图片
![诺基亚|关于redis数据面试指南1.0——Redis的数据类型[二]!](https://image.uc.cn/s/wemedia/s/upload/2020/9525748e0ee8670f5a856bbfd9eaf59c.png)
文章图片
![诺基亚|关于redis数据面试指南1.0——Redis的数据类型[二]!](https://image.uc.cn/s/wemedia/s/upload/2020/be1abb895f8a3f1fc760ce8b50277bdc.png)
文章图片
![诺基亚|关于redis数据面试指南1.0——Redis的数据类型[二]!](https://image.uc.cn/s/wemedia/s/upload/2020/fae9de5ac531cbd5403704c5b174693c.png)
文章图片
![诺基亚|关于redis数据面试指南1.0——Redis的数据类型[二]!](https://image.uc.cn/s/wemedia/s/upload/2020/2c2d47f472ad88c5772df6550bf4d75e.png)
集合:集合 (set)类型还用于保存多个字符串元素 , 但与列表类型不同的是 , 在集合中不允许存在重复元素 , 且集合中的元素是无序的 , 无法通过索引下标获得元素 。 如图显示了集合user:1:follow包含4个元素:\"it\"、\"music\"、\"his\"、\"sports\" , 一个集合可以存储最多232-1个元素 。 除了支持对集合进行增删改查外 , Redis还支持多个集合取交集 , 并集 , 差集 , 合理使用好的集合类型 , 可以解决实际开发中的许多实际问题 。命令:
一、集合内操作:
1、添加元素:
sadd key element [element ...
2、删除元素:
srem key element [element ...
返回结果为成功删除元素个数
3、计算元素个数:
4、判断元素是否在集合中
sismember key element
如果给定元素element在集合内返回1 , 反之返回0
5、随机从集合返回指定个数元素
srandmember key [count
[count
是可选参数 , 如果不写默认为1
6、从集合随机弹出元素
spop key
spop操作可以从集合中随机弹出一个元素 , 例如下面代码是一次spop后 , 集合元素变为\"d b a\"
7、获取所有元素
smembers key
获取集合myset所有元素 , 并且返回结果是无序的
二、集合间操作:
现在有两个集合 , 它们分别是user:1:follow和user:2:follow
1、求多个集合的交集
sinter key [key ...
例如下面代码是求user:1:follow和user:2:follow两个集合的交集 , 返回结果是sports、it
2、求多个集合的并集
suinon key [key ...
如下代码是求user:1:follow和user:2:follow两个集合的并集 , 返回结果是sports、it、his、news、music、ent
3、求多个集合的差集
sdiff key [key ...
如下代码是求user:1:follow和user:2:follow两个集合的差集 , 返回结果是music和his
4、将交集、并集、差集的结果保存
sinterstore destination key [key ...
suionstore destination key [key ...
sdiffstore destination key [key ...
有序集合:
有序集合相对于哈希、列表、集合相比略有异同 , 但既然称之为有序集合 , 它与集合必然有联系 , 它保留了集合不能有重复成员的特征 , 但不同之处在于 , 有序集合中的元素可以排序 。 但它与列表使用索引下标作为排序依据不同的是 , 它为每个元素设置了一个分数(score)作为排序依据 。 这个有序集合由krismikefranktimmartintom组成 , 其分数分别为191200220250251组成 , 这个有序集合提供了获取指定分数和元素范围查询 , 计算成员排名等功能 , 合理地使用这个有序集合 , 可以帮助我们解决实际开发中的许多问题 。
注:顺序集中的元素不能重复 , 但 score可以重复 , 就像班上的同学不能重复学号一样 , 但考试成绩可以一样 。
列表、集合、有序集合三者的异同点
命令:
一、集合内:
1、添加成员:
zadd key score member [score member ...
向有序集合user:ranking添加用户tom和他的分数251
2、计算成员个数
3、计算某个成员的分数
zscore key member
tom的分数为251 , 如果成员不存在则返回nil
4、计算成员的排名:
zrank key member
zrevrank key member
zrank是从分数从低到高返回排名 , zrevrank反之 。 例如下面操作中 , tom在zrank和zrevrank分别排名第5和第0(排名从0开始计算)
【诺基亚|关于redis数据面试指南1.0——Redis的数据类型[二]!】
5、删除成员
zrem key member [member ...
将成员mike从有序集合user:ranking中删除
返回结果为成功删除的个数 。
6、增加成员的分数
zincrby key increment member
下面操作给tom增加了9分 , 分数变为了260分
7、返回指定排名范围的成员
zrange key start end [withscores
zrevrange key start end [withscores
注意:start end可以使用0 -1代指全部
有序集合是按照分值排名的 , zrange是从低到高返回 , zrevrange反之 。 下面代码返回排名最低的是三个成员 , 如果加上withscores选项 , 同时会返回成员的分数 。
8、返回指定分数范围成员个数
zcount key min max
返回200到221分的成员的个数
二、集合间操作:
将两个有序集合导入到Redis中
1、交集:
zinterstore destination numkeys key [key ...
[weights weight [weight ...
[aggregate sum|min|max
解释:
destination:交集计算结果保存到这个键 。
numkeys:需要做交集计算键的个数 。
key[key...
:需要做交集计算的键 。
weights weight[weight...
:每个键的权重 , 在做交集计算时 , 每个键中的每个member会将自己分数乘以这个权重 , 每个键的权重默认是1 。
aggregate sum|min|max:计算成员交集后 , 分值可以按照sum(和)、min(最小值)、max(最大值)做汇总 , 默认值是sum 。
对user:ranking:1和user:ranking:2做交集 , weights和aggregate使用了默认配置 , 可以看到目标键user:ranking:1_inter_2对分值做了sum操作:
如果想让user:ranking:2的权重变为0.5 , 并且聚合效果使用max , 可以执行如下操作:
并集:
zunionstore destination numkeys key [key ...
[weights weight [weight ...
[aggregate sum|min|max
命令的所有参数和zinterstore是一致的 , 只不过是做并集计算 , 例如下面操作是计算user:ranking:1和user:ranking:2的并集 , weights和aggregate使用了默认配置 , 可以看到目标键user:ranking:1_union_2对分值做了sum操作:
键管理:
一、单个键管理
针对单个键的命令 , 前面几节已经介绍过一部分了 , 例如type、del、object、exists、expire等 , 下面将介绍剩余的几个重要命令 。
1、键重命名
rename key newkey
现有一个键值对 , 键为python , 值为jedis
将键python重命名为java
如果在rename之前 , 键java已经存在 , 那么它的值也将被覆盖 , 如下所示
2、随机返回一个键
randomkey
当前数据库有1000个键值对 , randomkey命令会随机从中挑选一个键
3、键过期
它可以自动将带有过期时间的键删除 , 在许多应用场景都非常有帮助 。
expire key seconds:键在seconds秒后过期 。
expireat key timestamp:键在秒级时间戳timestamp后过期 。
为键hello设置了10秒的过期时间 , 然后通过ttl观察它的过期剩余时间(单位:秒) , 随着时间的推移 , ttl逐渐变小 , 最终变为-2
ttl命令和pttl都可以查询键的剩余过期时间 , 但是pttl精度更高可以达到毫秒级别 , 有3种返回值:
大于等于0的整数:键剩余的过期时间(ttl是秒 , pttl是毫秒) 。
-1:键没有设置过期时间 。
-2:键不存在 。
pexpire key milliseconds:键在milliseconds毫秒后过期 。
4、Redis过期命令注意事项
4.1、如果expire key 的键不存在 , 返回结果0
4.2、如果过期时间为负值 , 键立即被删除 , 犹如del命令一样
4.3、persist可以将键的过期时间清除
4.4、对于字符串类型键 , 执行set命令会去掉过期时间 。
4.5、redis不支持二级数据结构(哈希 , 列表)内部元素的过期功能 , 例如不能对列表类型的一个元素做过期时间设置 。
4.6、setex命令作为set+expire的组合 , 不但是原子执行
二、遍历键
Redis提供了两个命令遍历所有的键 , 分别是keys和scan
1、全量遍历键:
keys pattern
keys命令是支持pattern匹配的 , 例如向一个空的Redis插入4个字符串类型的键值对 。
要获取所有的键 , 可以使用keys pattern命令:
为了遍历所有的键 , pattern直接使用星号 , 这是因为pattern使用的是glob风格的通配符:
*代表匹配任意字符 。
.?代表匹配一个字符 。
[
代表匹配部分字符 , 例如[1 , 3
代表匹配1 , 3 , [1-10
代表匹配1到10的任意数字 。
\\x用来做转义 , 例如要匹配星号、问号需要进行转义 。
匹配以j , r开头 , 紧跟edis字符串的所有键:
匹配到hello和hill这两个键
三、数据库管理
Redis提供了几个面向Redis数据库的操作 , 它们分别是dbsize、select、flushdb/flushall命令 。
1、切换数据库
select dbIndex
很多关系型数据库 , 比如 MySQL支持在一个实例下存在多个数据 , 但 Redis仅仅使用数字实现了多个数据库 , 而关系型数据库使用字符区分不同的数据库名 。 在 Redis默认配置中有16个数据库:databases 16
假定 databases=16select0操作将切换到第一个数据库 , select15将选择最后一个 , 但数据库0和15之间的数据不相关 , 甚至可能有相同的键
在 Redis3.0中 , 这种功能已经被逐渐削弱了 , 比如 Redis的分布式实现 Redis Cluster只允许使用0号数据库 , 只是为了向下兼容老版本的数据库功能 , 而这个功能并没有被完全抛弃 。
第一: Redis是单线程 。 即使有多个数据库被使用 , 这些数据库仍然使用一个 CPU , 并且彼此之间仍会受到影响 。
第二:多数据库的使用方式 , 会使数据库的调试和运行变得很困难 , 即使有一个较慢的查询存在 , 仍然会影响到其他数据库 , 这会使其他业务方很难找到问题所在 。
第三:部分 Redis客户机完全不支持这种方法 。 即便有了这种支持 , 在开发过程中数字数据库也很容易被搞乱 。
2、flushdb/flushall
使用 flushdb/flushall命令清除数据库 , 其区别在于 flushdb只清除当前数据库 ,flushall将清除所有数据库 。
当前0号数据库有四个键值对、1号数据库有三个键值对:
如果在0号数据库执行flushdb , 1号数据库的数据依然还在:
在任意数据库执行flushall会将所有数据库清除:
使用 flushdb/flushall命令可以很方便地清除数据 , 但有两个问题:
一: flushdb/flushall命令清除了所有的数据 , 一旦错误操作的结果令人难以置信 ,
二:如果当前数据库有更多的键值 , 则 flushdb/flushall可能会阻塞 Redis
因此 , 使用 flushdb/flushall时必须非常小心
如果觉得对你有所帮助 。 记得收藏和关注呦!(每日更新各种大数据框架)
如需转载请注明出处(创作不易请见谅)
和巨婴程序猿一起成长 。 让自己变得更优秀
想了解更多精彩内容 , 快来关注跟着巨婴去逆袭
我最近一直在思考(大数据通俗讲解)的问题 , 你的看法是什么呢?关注我快说出来一起交流一下吧~
推荐阅读
- 英雄联盟|LOL:关于锤石的十大黑暗兵法
- 关于消防设备供电可靠性的一些看法,这篇文章讲清楚了!
- 新机发布|诺基亚N系列又有“新机”,捡到传说中的诺基亚N87
- 诺基亚 5.3 现身海外网站,配备骁龙 665 有望近期发布
- |驻纽约总领馆:搭乘8月30日临时航班留学人员需提供核酸阴性证明
- 阳阳4011|关于肌肤衰老,你了解多少?
- |关于疫苗!一个重磅好消息,一个重要提醒……
- 关于臀冲这个动作,强化下肢肌肉,助你练出强壮下半身
- 参考消息|关于政策,拜登与特朗普有何不同?
- 安理会未通过美国关于延长对伊朗武器禁运的决议草案
