velocity 获取list对象_Redis专题2:认识list、Zset与BitMaps
Redis 初步探索
List
存储类型
存储有序的字符串(从左到右),元素可以重复,可以充当队列和栈的角色
操作命令
lpush queue alpush queue b crpush queue d elpop queueblpop queuebrpop queue
「取值」
lindex queue 0 lindex queue 0 -1
应用场景
因为List 是有序的,可以用来做用户的时间线。
消息队列
List 提供了两个阻塞的弹出操作:BLOPO/BRPOP,可以设置超时时间
BLPOP:BLPOP key1 timeout 移除并获取列表的第一个元素,如果列表没有元素会阻塞队列直到等待超时或发现可弹出元素为止。
BRPOP:BRPOP key1 timeout 移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
队列:先进先出:rpush blpop ,左头右尾,右边进行队列,左边出队列。
栈:先进先出:rpush brpop
Set
「存储类型」
String 类型的无序集合,最大存储数量为 2^32-1
「操作命令」
sadd myset a b c d e f g
smembers myset
scard myset
srandmember key
spop myset
srem myset d e f
sismember myset a
应用场景
spop myset
例如:微博点赞:
微博id 为 w1001 ,用户的id为 u2001
用like:w1001来维护u2001 这条微博的所有点赞的用户
点赞了这表微博:sadd like:w1001 u2001
取消点赞:srem: like: w1001 u2001
是否点赞:sismember like:w1001 u2001
点赞的所有用户:smembers like:w1001
点赞数:scrad like:u2001
用tags:t3001 来维护商品所有的标签
sadd tags:t3001 物品便宜
sadd tags:t3001 质量好
sadd tags:t3001 物流超快
获取差集
sdiff set1 set2
获取交集
sinter set1 set2
获取并集
sunion set1 set2
例如:苹果手机上市
iPhone 上市了
sadd brand:apple iPhoneXX
sadd brand: ios iPhoneXX sad screensize: 6.0-6,24 iPhoneXX sad screentype:lcd iPhoneXX 筛选商品:苹果的,IOS,屏幕在 6.0~6.24之间的,屏幕材质是lcd屏幕 sinter brand:apple brand:ios screensize:6.0-6.24 screentype:lcd
- 商品筛选
- 商品标签
- 点赞、签到、打卡
- 随机获取元素
- 查看元素是否存在
- 移除一个或者多个元素
- 随机弹出一个元素
- 随机获取一个元素
- 统计元素个数
- 获取所有元素
- 添加一个或者多个元素
ZSet
「存储类型」
sorteed set,有序的set,每个元素有个score
score 先相同时,按照key的ASCII码排序
数据结构对比:
数据结构 | 是否允许重复元素 | 是否有序 | 有序实现方式 |
---|---|---|---|
列表list | 是 | 是 | 索引下标 |
集合set | 否 | 否 | 无 |
有序集合zset | 否 | 是 | 分支score |
「操作命令」
添加元素
zadd myset 10 java 20 php 30 python 40 go
获取全部元素
zrange myzset 0 -1 withscoreszrevrange myset 0 -1 withscores
根据分支区间获取元素
zrangebyscore myset 20 30
移除元素
也可以根据score rank 删除
zrem myzset php cpp
统计元素个数
zcard myzset
分值递增
zincrby myset 5 java
根据分支统计个数
zcount myset 20 60
获取元素rank
zrank myset java
获取元素 score
zscore myset java
也有倒序的rev 操作(reverse)
应用场景
- 排行榜
id为 6001 的新闻点击数加1,:zincrby hotNews:20200701 1 n6001
获取今天点击最多的15条:zrevrange hotNews: 20200701 0 15 withscores
BitMaps
BitMaps 是在字符串类型上面定义的位操作,一个字节由8个二进制位组成。
set k1 a
获取value 在 offset 处的值(a 对应的ASCII码是97,转换为二进制数据是:01100001)
getbit k1 0
修改二进制数据(b 对应的ASCII码是98,转换为二进制数据为 01100010)
setbit k1 6 1setbit k1 7 0get k1
统计二进制位中1的个数
bitpos k1 1bitpos k1 0
BITOP 命令支持AND \OR \NOT\XOR这四种操作中的任意一种参数:
BITOP AND destkey srckey1 ..... srckeyN,对一个或者多个key求逻辑与,并将结果保存到destkey
BITOP OR destkey srckey1 ..... srckeyN,对一个或者多个 key 求逻辑或,并将结果保存到 destkey
BITOP XOR destkey srckey1 .... srckeyN,对一个或者多个key,求逻辑异或,并将结果保存到 destkey
BITOP NOT destkey srckey1,对给定key求逻辑非,并将结果保存到destkey
应用场景
- 用户访问统计
- 在线用户统计
Hyperloglogs
提供了一种不太准确的基数统计方法,比如统计网站的UV,存在一定的误差
Streams
5.0 推出的数据类型。支持多播的可持久化的消息队列,用户实现发布订阅功能。
总结
对象 | 对象type 属性值 | type命令输出 | 底层可能的存储结构 | object encoding |
---|---|---|---|---|
字符串对象 | OBJ_STRING | "string" | OBJ_ENCODING_INT \OBJ_ENCODING_EMBSTR\OBJ_ENCODING_RAW | int\embstr\raw |
列表对象 | OBJ_LIST | “list” | OBJ_ENCODING_QUICKLIST | quicklist |
哈希对象 | OBJ_HASH | "hash" | OBJ_ENCODING_ZIPLIST\OBJ_ENCODING_HT | ziplist\hashtable |
集合对象 | OBJ_SET | "set" | OBJ_ENCODING_INSERT | intset\hashtable |
有序集合对象 | OBJ_ZSET | "zset" | OBJ_ENCODING_ZIPLIST\OBJ_ENCODING_SKIPLIST | ziplist\skiplist |
编码转换总结
对象 | 原始编码 | 升级编码 | |
---|---|---|---|
字符串对象 | INT | embstr | raw |
整数并且小于long 2^63-1 | 超过44字节,被修改 | ||
哈希对象 | ziplist | hashtable | |
键和值的长度小于64byte,键值对个数不超过512个,同时满足 | |||
列表对象 | quicklist | ||
集合对象 | intset | hashtable | |
元素都是整数类型,元素个数小于512个,同时 | |||
有序集合对象 | ziplist | skiplist | |
元素数量不超过128个,任何一个member的长度小于64字节,同时满足 |
velocity 获取list对象_Redis专题2:认识list、Zset与BitMaps相关推荐
- js去el的map_转:el表达式获取map对象的内容 js中使用el表达式 js 中使用jstl 实现 session.removeattribute...
原文链接: 总结: el表达式获取map对象的内容 后端: HashMap map1 = new HashMap(); map1.put("key1","lzsb&quo ...
- selenium提取数据之driver对象定位标签元素获取标签对象的方法
selenium提取数据之driver对象定位标签元素获取标签对象的方法 在selenium中可以通过多种方式来定位标签,返回标签元素对象 find_element_by_id (返回一个元素) fi ...
- springMVC 使用WebApplicationContext获取ApplicationContext对象
主要用于从application中获取bean 1.applicationContext 在web.xml中使用listener配置 <context-param><param-na ...
- vue 绑定事件,获取元素对象
vue 绑定事件,获取元素对象 例如: <img v-bind:src="item.fmguid" v-on:error="imgerror($event)&quo ...
- R语言get函数、get0函数、mget函数获取数据对象实战
R语言get函数.get0函数.mget函数获取数据对象实战 目录 R语言get函数.get0函数.mget函数获取数据对象实战 #基本语法
- 获取SpringBean对象工具类
#获取SpringBean工具类 SpringBeanUtil代码如下: package com.meeno.wzq.util;import org.springframework.beans.Bea ...
- spring整合mybatis(入门级简单教程3)--获取sqlSession对象
引子:sqlSession对象在mybatis中的作用是不用说的了.比如我们可以用它来commit().rollback()以及执行我们的map代码.下面介绍获取sqlSession对象的两种方法: ...
- TWebBrowser 与 MSHTML(2): 获取 window 对象的时机
这是在页面下载完毕后即刻获取: unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Co ...
- 如何通过其值获取JavaScript对象中的键?
本文翻译自:How to get a key in a JavaScript object by its value? I have a quite simple JavaScript object, ...
- 通过属性值从对象数组中获取JavaScript对象[重复]
本文翻译自:Get JavaScript object from array of objects by value of property [duplicate] This question alr ...
最新文章
- ASP.NET Web API实践系列06, 在ASP.NET MVC 4 基础上增加使用ASP.NET WEB API
- 可视化深入理解损失函数与梯度下降 | 技术头条
- 关于ASP.NET MVC P5中CheckBox的HtmlHelper方法的bug。
- 镜像的分层结构 - 每天5分钟玩转容器技术(11)
- Java 数字转换成汉字
- idea 关于高亮显示与选中字符串相同的内容
- 原博客文章(Apache初配2008/4/8)
- Swagger2的使用
- php数量百分比,mysql PHP行数+百分比
- 左右手桌面股票盯盘软件(DesktopStockTracking)
- java技术选型文档模板_系统方案汇总文档
- 浅谈LSTM对于周期时间序列数据的预测
- HTML5 ——学习笔记整理
- 4G边缘计算工业路由器与传统4G工业路由器的区别
- xposed模块编写教程_太极xposed模块使用教程
- 自制操作系统5-结构体、文字显示与GDT/IDT初始化
- 履带式机械臂小车的制作分享
- Python | List和Deque的速度对比
- pyinstaller 打包附带DLL
- Vscode c与c++编译环境配置(.vscode),看这一篇就够了