Redis小秘密
Redis小秘密
临渊羡鱼,不如退而织网。
一、Redis基本数据类型
想必很多人都能脱口而出String、List、Hash、Sorted Set和Set五种基本数据类型。
以及五大基本数据类型简要区别:
- redis存储的是:key、value格式的数据,其中key都是字符串,value有5种不同的数据结构。
- value的数据结构:
- 字符串类型 string;
- 哈希类型 hash : map格式;
- 列表类型 list : linkedlist格式,支持重复元素;
- 集合类型 set : 不允许重复元素;
- 有序集合类型 sortedset:不允许重复元素,且元素有顺序。
还有五种基本数据类型底层对应的数据结构:

还有五种基本数据类型对应的使用场景:
String
- 计数器
- 分布式锁
- 存储对象
List
- 消息队列
- 排行榜
- 最新消息
Set
- 好友/关注/粉丝/感兴趣的人集合
- 随机展示
- 黑/白名单
Hash
- 购物车
- 存储对象
ZSET
- 销量排名、积分排名、成绩排名、各种排行榜
- 延迟队列
- 限流
二、但是Redis还有其他的三种特殊数据类型呢?
还能脱口而出geospatial、hyperloglog和bitmap吗。
1、地理位置-Geospatial
1 # getadd 添加地理位置
2 #规则:两级无法直接添加,我们一般会下载城市数据,直接通过java程序一 次性导入!
3 #有效的经度从-180度到180度。
4 #有效的纬度从-85. 05112878度到85.05112878度。
5 #当坐标位置超出上述指定范围时,该命令将会返回一个错误。
6 GEOADD china:cipty 31.405 12.4894 shanghai # 添加地理位置
7 geodist china:cipty shenzhen shanghai km # 获取两个地理之间的距离,单位是km
8 geohash china:cipty shenzhen shanghai # 将二维的经纬度转换为-维的字符串,如果两个字符串越接近,那么则距离越近!
9 geopos china:cipty shenzhen #获取指定的城市的经度和纬度!

2、基数统计-Hyperloglog
说明:
- 基数不大,数据量不大就用不上,会有点大材小用浪费空间;
- 有局限性,就是只能统计基数数量,而没办法去知道具体的内容是什么;
- 和bitmap相比,属于两种特定统计情况,简单来说,HyperLogLog 去重比 bitmap 方便很多;
- 一般可以bitmap和hyperloglog配合使用,bitmap标识哪些用户活跃,hyperloglog计数。
一般使用:
- 统计注册 IP 数;
- 统计每日访问 IP 数;
- 统计页面实时 UV 数;
- 统计在线用户数;
- 统计用户每天搜索不同词条的个数。
1 PFadd mykey aIa b C defghij #创建第一组元素mykey
2 PFCOUNT mykey # 统计mykey元素的基数数量
3 PFadd mykey2 i j z xcvbnm #创建第二组元素mykey2
4 PFMERGE mykey3 mykey mykey2 #合并两组mykey mykey2 => mykey3 并集
5 PFCOUNT mykey3 #看并集的数量!

3、位图-Bitmaps
Bitmaps可用于统计用户信息,活跃、不活跃,登录、未登录,打卡状态如365打卡,两个为打卡的场景下都可以使用Bitmaps。其底层都是操作二进制位来进行记录,就只有0和1两个状态。
1 SETBIT sig 0 1 # 设置位图
2 GETBIT sig 6 # 获取位图
3 ################################
4 `用户签到`:模拟用户打卡场景,0-6为一周,0为未打卡,1为打卡
5 BITCOUNT sig # 统计用户一周打卡天数

三、Redis自带性能测试工具
后台启动Redis后即可通过命令打开新窗口使用自带的性能测试工具。
1 # 如只测试set,100万个请求,1亿
2 $ redis-benchmark -t set -n 1000000 -r 100000000

四、Redis可以通过value获取key?
据说是在Redis客户端是无法通过value获取key的,我也不确定,但是在Java业务上是可以实现这样的需求的。

五、Redis五种基本数据类型的性能排序?
至今未解,有缘人求赐教。(String > ? Hash ? List ? Set ? Hash ? Sorted Set)
临渊羡鱼
不如退而织网
Redis小秘密的更多相关文章
- redis中的小秘密和持久化小细节
https://www.jianshu.com/p/36c301ac87df 持久化的情况 https://www.cnblogs.com/wdliu/p/9377278.html 集群搭建 主从 ...
- 春招必问的redis持久化(RDB AOF),你能答上来么?
春招面试模拟,如同雷同,纯属巧合!!! 面试的大体流程: 第一步:一般会有笔试题,也可能没有.有笔试题就要好好答了,因为会重视笔试结果,为了节约面试官时间,HR可能先会看,不合格直接让你走人了. 第二 ...
- 使用redis构建可靠分布式锁
关于分布式锁的概念,具体实现方式,直接参阅下面两个帖子,这里就不多介绍了. 分布式锁的多种实现方式 分布式锁总结 对于分布式锁的几种实现方式的优劣,这里再列举下 1. 数据库实现方式 优点:易理解 缺 ...
- Ignite性能测试以及对redis的对比
测试方法 为了对Ignite做一个基本了解,做了一个性能测试,测试方法也比较简单主要是针对client模式,因为这种方法和使用redis的方式特别像.测试方法很简单主要是下面几点: 不作参数优化,默认 ...
- mac osx 安装redis扩展
1 php -v查看php版本 2 brew search php|grep redis 搜索对应的redis ps:如果没有brew 就根据http://brew.sh安装 3 brew ins ...
- Redis/HBase/Tair比较
KV系统对比表 对比维度 Redis Redis Cluster Medis Hbase Tair 访问模式 支持Value大小 理论上不超过1GB(建议不超过1MB) 理论上可配置(默认配置1 ...
- Redis数据库
Redis是k-v型数据库的典范,设计思想及数据结构实现都值得学习. 1.数据类型 value支持五种数据类型:1.字符串(strings)2.字符串列表(lists)3.字符串集合(sets)4.有 ...
- redis 学习笔记(2)
redis-cluster 简介 redis-cluster是一个分布式.容错的redis实现,redis-cluster通过将各个单独的redis实例通过特定的协议连接到一起实现了分布式.集群化的目 ...
- redis 学习笔记(1)
redis持久化 snapshot数据快照(rdb) 这是一种定时将redis内存中的数据写入磁盘文件的一种方案,这样保留这一时刻redis中的数据镜像,用于意外回滚.redis的snapshot的格 ...
随机推荐
- 安装Apache-storm-0.9.1-incubating图解教程
注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6596214331988247054/ 安装步骤 (1) 安装Zookeeper集群,可以参考前一篇文章,本文已安装 ...
- MASA Framework - EventBus设计
目录 MASA Framework - 整体设计思路 MASA Framework - EventBus设计 概述 利用发布订阅模式来解耦不同架构层级,亦可用于解决隔离业务之间的交互 优点: 松耦合 ...
- c++中构造函数与析构函数
构造函数与析构函数 构造函数与析构函数1. 构造函数2. 析构函数3. 拷贝函数4. 总结 在c++中有2个特殊的函数:构造函数和析构函数,它们分别对类对象进行初始化和清理工作. 1. 构造函数 构造 ...
- 在Linux系统(centos7)中,安装VScode,并在VScode上编写HTML网页
[实验目的] 在Linux系统中,搭建编写HTML网页的环境.在VS code官网上,下载VS code安装程序,进行安装.在VS code软件中编写HTML页面,并正确运行. [实验步骤] 1) ...
- Solon 开发,二、注入或手动获取Bean
Solon 开发 一.注入或手动获取配置 二.注入或手动获取Bean 三.构建一个Bean的三种方式 四.Bean 扫描的三种方式 五.切面与环绕拦截 六.提取Bean的函数进行定制开发 七.自定义注 ...
- 新设备关联Gitlab
新设备关联Gitlab 1:创建SSH Key.在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步.如果 ...
- Maven 框架结构知识总结
1.maven目录结构 目录 内容 ${basedir} 存放pom.xml和所有子目录 ${basedir}/src/main/java 项目Java代码 ${basedir}/src/main/r ...
- thinkpad s5 电源功率不足提示
相关答案 作者:路灯瓜 链接:https://www.zhihu.com/question/47551448/answer/122578101 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权 ...
- 什么是XSS攻击?什么是SQL注入攻击?什么是CSRF攻击?
1. XSS(Cross Site Script,跨站脚本攻击) 是向网页中注入恶意脚本在用户浏览网页时在用户浏览器中执行恶意脚本的攻击方式. 1.1跨站脚本攻击分有两种形式: 反射型攻击(诱使用户点 ...
- JDK并发工具类
在JDK的并发包里提供了几个非常有用的并发工具类.CountDownLatch.CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段,Exchanger工具类则提供了在线程 ...