Redis小秘密

      临渊羡鱼,不如退而织网。

一、Redis基本数据类型

想必很多人都能脱口而出String、List、Hash、Sorted Set和Set五种基本数据类型。

以及五大基本数据类型简要区别:

  • redis存储的是:key、value格式的数据,其中key都是字符串,value有5种不同的数据结构。
  • value的数据结构:
  1. 字符串类型 string;
  2. 哈希类型 hash : map格式;
  3. 列表类型 list : linkedlist格式,支持重复元素;
  4. 集合类型 set : 不允许重复元素;
  5. 有序集合类型 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)

 临渊羡鱼

不如退而织网 

最新文章

  1. Web 开发人员和设计师必读文章推荐【系列三十】
  2. 用java语言实现事件委托模式
  3. shell编程报错 [: missing `]'
  4. HTML5 :b/strong加粗,i/em倾斜区别
  5. Android体系结构
  6. apache开源项目--lucence
  7. HDU-1862-EXCEL排序
  8. Android各版本特性
  9. 洛谷P4841 城市规划 [生成函数,NTT]
  10. 正常终止expdp作业
  11. Hbase Filter过滤器查询详解
  12. Firefox录制时浏览器提示代理服务器拒绝连接
  13. NET设计模式 第二部分 结构性模式(8):桥接模式(Bridge Pattern)
  14. Python虚拟环境工具-Virtualenv 介绍及部署记录
  15. python自定义函数和推导
  16. [培训]keysight培训
  17. Necklace CodeForces - 613C (构造)
  18. innodb分配内存
  19. sklearn评估模型的方法
  20. VS2008 "无法找到资源编译器dll 请确保路径正确"

热门文章

  1. Solon Web 开发,五、数据访问、事务与缓存应用
  2. git 重置密码后,本地电脑需要修改git密码
  3. 全网最全的Java SpringBoot点赞功能实现
  4. golang中字符串-字节切片,字符串-字符切片的互转
  5. Windows 下如何查看文件夹被哪个进程所占用
  6. linux解析映射文件与自动加载脚本
  7. expect.sh
  8. CKKS :Part1,普通编码/解码
  9. Mac OS Fusion Linux虚拟机网络设置
  10. python 小兵(2)