列表,位图,string,哈希就是字典套字典,help hash这样所有的命令都可以看set现在依然是kv,v换成set,就是一个嵌套结构,元素是add,添加进去,一个key,里面value部分,setl里叫成员,member,也就是可以加很多member。
是一个无序的去重的
元素可以认为就一种类型,所有的复合结构里面真正存的是就一种类型,这个类型就是字符串
card就是基数,在统计里非常重要,等于在select的时候用到的distinct,基数就是指的是有一大堆样本,去重之后还有多少个个体,不用lens就是因为set天生去重
对于在python里的容器类型,知道它们长度是不需要遍历的,都给你存好了
这里的元素应该用这种方式去看
这个就是python里的in操作,这种操作对于set效率还是比较高的,列表是链表,要从头到尾走一遍,set的in操作效率还是比较高的
两个set集合,看起来一样,但是未必顺序就一样
这个顺序,跟我们录入的顺序一样
再加一个,这两个其实有时候会不一样,看演示的时候的情况,告诉我们即时两个元素完全相同的,从smembers看,不能保证里面顺序是否一致。
这个输出之后是有顺序的,但是不敢保证每次列出的顺序是一致的
f1有5个元素,srandmember 这样是随机取元素
只有5个,就算要6个也只有5个
没有就随机重复拿几个
正向10个,还是有几个拿几个,-10就可以重复拿,正数和负数的绝对值小于等于它的长度,尽量给你不重复去拿,超过长度就不一样了,反向的会给你重复去拿,正向的不会
pop就是随机弹出一个,链表的pop是左边弹出还是右边弹出,是有头和尾的
SMOVE,是从源到目标移动的元素
集合运算
算差集sdiff,sdiffstore 算差集,同时把结果存储在目标key中
这两个集合求差集,得出来的结果是,789
交集部分
得到的结果正好是123 456
并集是所有集合的并集
123 456 789 999
当用户访问另一个用户的时候,会显示两个用户共同关注哪些相同的用户,应该用交集
这样取交集就是共同的好友,其实你登录显示的好友已经放在redis中了
放在redis里就这么放,比如101号用户,多少好友,这两个取交集即可
有序集合SortedSet
想办法给个数值就可以排序了,我们把这个数值叫得分,首先需要是个set,只不过里面的元素需要关联一个浮点数的值,这个值称为score得分,会按照分支,由小到大,默认应该是升序的,排列所有的元素。分值可以相同,会默认按照ascii码字符排序来解决排序问题
这个分支可以当做商品的贵贱来排
员工的薪水也可以作为排序
有的前缀都是z开头的
set用s,l是列表,最简单都是留给字符串的,hash是h开头
基数,就是返回不同元素个数
Zcount 指的是这个key,用这个分值来取最大值和最小值区间
比如价格在三块钱,到5块钱之间的水果列出来,只不过求的是数值
zscore就是把你给的成员的分值打印一下
分值就可以增长和减少,increment这个值写成负数就是减分
range就是区间,Zrange指的是返回指定索引区间的元素,它排序就用索引,有序才能用索引,set没法索引,因为是无序,有序set就有序了,有序就可以用这样个区间去访问,访问的时候是带key的,后面加withscore这样一个参数,告诉它带所有的参数
但是有一些分值是一样的,比如好几个人月薪一样,按照字典序进行排序,因为默认升序,字典序也是升序来排的,默认按照score从小到大排,从大到小,就选择zrevrange,这样一般是分值一样,谁在前谁在后的问题了
这两个是相反顺序
返回元素的排名,rank就是排名的意思,返回这个member排第几
zrevrank,告诉你这个menber反转之后排第几,其实就是索引
分值区间,range指的是索引区间,所以不能这么写
这里是从0开始,默认是升序,0-1是david在前
如果要薪水前10名,用reverse版本,就是降序排,withscores还可以带上分数
range就是按照你给定的索引位置来得到
还可以在分数上增加减少
倒排取前几名很有用,带不带分值由你决定
告诉你当前的排名
第4,索引正好是3
正好给了一个score区间
这里默认还是升序
这里也有reverse版本
这个还可以用偏移
limit是返回几个,offset是偏移几个,help查看如何写
其实offset可以直接这么写,偏移掉一个,一般拿到分值就带上withscores
其实往往用的都是倒排而不是正排
加了括号就不是闭区间了,3500就不出现了
一般就只能在前面加括号,这是加括号可以改变边界
正无穷和负无穷
zrem是移除元素,元素没了,带的分值也没了,元素不存在就忽略掉
可以指定排名也就是索引范围
指定分值范围移除
现在的集合运算带上了一个分数,带上分值,集合运算就发生了一些变化
一定要有目标,存储起来
求并集有一个目标(求好的并集存这里),numkeys就是指key的数量(比如后面要求并集的有两个,就写个2,然后写 看key1 key2)
weights 权重可有可无,有了几个key,就写几个权重,每个权重都是分别给他们配的
aggregate采用什么方式的聚合运算,求最大值,还是最小值
现在有考试成绩
求聚合运算,peter是90+80
这两个一模一样
zrange,从哪到哪,拿到基数就知道整个长度,然后带上分数
配一个权重
125,,30
也就是这里是分别配权重,真的要做聚合运算,每个都要加权重才比较科学,(不然就是日元直接+美元,不科学)
交集也是类似,几乎一模一样
这些需要参考数据做综合的处理
榜单到最后其实就是top n的问题,看网络的点击量,还有CD,大部分情况下用音乐ID作为唯一标识
python的redis库2.0的语法和3.0的有点区别,
显示所有的点击量都是为1 ,后面点击量上去了,这些点击量就增加到数据上了
升序,从小到大,按照score来排
排行榜是倒着取,取分值0-9,正好10个,拿到排行榜就哭打印了,true就是withscore,打印出来就有音乐名称和分数
3。0库怎么写
前面加key,后面写字典
下面的语法两个换了地方
时间戳是由小到大的,想看最后10条,就倒排时间戳就拿到了,有些网站的评论是异步的方式,先让你的评论显示在那里,但是其实刷新一下就没了,后面慢慢入库,但是把评论到redis里,就可以一直看,redis里的数据隔一段时间慢慢入库就行了
取多少条到多少条,反正是按时间戳排序,跟分页一个道理
**排行榜,一般排行榜可能用销售量来决定的 **
01代表第一天,02第二天,java的书买了1000本,redis2000本,第二天和第三天也是如此来做,这样求销售前10名
对这三个求并集,得出一个新的键存下来,求并集的意思是前三个相同的key做求sum,但是这里的值是累计值
既然是累计值,最后一天就是要统计的表单,最后一条的总是累计下来的最大值都在最后一条
所以要选max,然后最后出来的数据倒排一下
如果多个集合求并集之后,会生成一个巨大集合,要思考下内存是否够,大集合运算最怕内存耗尽
如果是统计的每天的销售绑定,那么只要求和就可以了,最后聚合运算求sum,最后倒排一下榜单就产生了