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相关推荐

  1. js去el的map_转:el表达式获取map对象的内容 js中使用el表达式 js 中使用jstl 实现 session.removeattribute...

    原文链接: 总结: el表达式获取map对象的内容 后端: HashMap map1 = new HashMap(); map1.put("key1","lzsb&quo ...

  2. selenium提取数据之driver对象定位标签元素获取标签对象的方法

    selenium提取数据之driver对象定位标签元素获取标签对象的方法 在selenium中可以通过多种方式来定位标签,返回标签元素对象 find_element_by_id (返回一个元素) fi ...

  3. springMVC 使用WebApplicationContext获取ApplicationContext对象

    主要用于从application中获取bean 1.applicationContext 在web.xml中使用listener配置 <context-param><param-na ...

  4. vue 绑定事件,获取元素对象

    vue 绑定事件,获取元素对象 例如: <img v-bind:src="item.fmguid" v-on:error="imgerror($event)&quo ...

  5. R语言get函数、get0函数、mget函数获取数据对象实战

    R语言get函数.get0函数.mget函数获取数据对象实战 目录 R语言get函数.get0函数.mget函数获取数据对象实战 #基本语法

  6. 获取SpringBean对象工具类

    #获取SpringBean工具类 SpringBeanUtil代码如下: package com.meeno.wzq.util;import org.springframework.beans.Bea ...

  7. spring整合mybatis(入门级简单教程3)--获取sqlSession对象

    引子:sqlSession对象在mybatis中的作用是不用说的了.比如我们可以用它来commit().rollback()以及执行我们的map代码.下面介绍获取sqlSession对象的两种方法: ...

  8. TWebBrowser 与 MSHTML(2): 获取 window 对象的时机

    这是在页面下载完毕后即刻获取: unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Co ...

  9. 如何通过其值获取JavaScript对象中的键?

    本文翻译自:How to get a key in a JavaScript object by its value? I have a quite simple JavaScript object, ...

  10. 通过属性值从对象数组中获取JavaScript对象[重复]

    本文翻译自:Get JavaScript object from array of objects by value of property [duplicate] This question alr ...

最新文章

  1. ASP.NET Web API实践系列06, 在ASP.NET MVC 4 基础上增加使用ASP.NET WEB API
  2. 可视化深入理解损失函数与梯度下降 | 技术头条
  3. 关于ASP.NET MVC P5中CheckBox的HtmlHelper方法的bug。
  4. 镜像的分层结构 - 每天5分钟玩转容器技术(11)
  5. Java 数字转换成汉字
  6. idea 关于高亮显示与选中字符串相同的内容
  7. 原博客文章(Apache初配2008/4/8)
  8. Swagger2的使用
  9. php数量百分比,mysql PHP行数+百分比
  10. 左右手桌面股票盯盘软件(DesktopStockTracking)
  11. java技术选型文档模板_系统方案汇总文档
  12. 浅谈LSTM对于周期时间序列数据的预测
  13. HTML5 ——学习笔记整理
  14. 4G边缘计算工业路由器与传统4G工业路由器的区别
  15. xposed模块编写教程_太极xposed模块使用教程
  16. 自制操作系统5-结构体、文字显示与GDT/IDT初始化
  17. 履带式机械臂小车的制作分享
  18. Python | List和Deque的速度对比
  19. pyinstaller 打包附带DLL
  20. Vscode c与c++编译环境配置(.vscode),看这一篇就够了

热门文章

  1. pycharm hotkey
  2. adb命令查看报名和查看手机分辨率
  3. Shell 相互调用
  4. Unity3d场景漫游---iTween实现
  5. NSURLConnection实现断点续传
  6. PHP CURL实现远程下载文件到本地
  7. redmine-1.2.2安装服务(附图)
  8. 游戏开发之函数的重载(C++基础)
  9. Tomcat详解(四)——Tomcat配置详解
  10. TLS1.3对CIP的影响(对密码套件的解释)