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)

 临渊羡鱼

不如退而织网 

Redis小秘密的更多相关文章

  1. redis中的小秘密和持久化小细节

    https://www.jianshu.com/p/36c301ac87df 持久化的情况 https://www.cnblogs.com/wdliu/p/9377278.html 集群搭建 主从  ...

  2. 春招必问的redis持久化(RDB AOF),你能答上来么?

    春招面试模拟,如同雷同,纯属巧合!!! 面试的大体流程: 第一步:一般会有笔试题,也可能没有.有笔试题就要好好答了,因为会重视笔试结果,为了节约面试官时间,HR可能先会看,不合格直接让你走人了. 第二 ...

  3. 使用redis构建可靠分布式锁

    关于分布式锁的概念,具体实现方式,直接参阅下面两个帖子,这里就不多介绍了. 分布式锁的多种实现方式 分布式锁总结 对于分布式锁的几种实现方式的优劣,这里再列举下 1. 数据库实现方式 优点:易理解 缺 ...

  4. Ignite性能测试以及对redis的对比

    测试方法 为了对Ignite做一个基本了解,做了一个性能测试,测试方法也比较简单主要是针对client模式,因为这种方法和使用redis的方式特别像.测试方法很简单主要是下面几点: 不作参数优化,默认 ...

  5. mac osx 安装redis扩展

    1 php -v查看php版本 2 brew search php|grep redis 搜索对应的redis   ps:如果没有brew 就根据http://brew.sh安装 3 brew ins ...

  6. Redis/HBase/Tair比较

    KV系统对比表 对比维度 Redis Redis Cluster Medis Hbase Tair 访问模式    支持Value大小 理论上不超过1GB(建议不超过1MB) 理论上可配置(默认配置1 ...

  7. Redis数据库

    Redis是k-v型数据库的典范,设计思想及数据结构实现都值得学习. 1.数据类型 value支持五种数据类型:1.字符串(strings)2.字符串列表(lists)3.字符串集合(sets)4.有 ...

  8. redis 学习笔记(2)

    redis-cluster 简介 redis-cluster是一个分布式.容错的redis实现,redis-cluster通过将各个单独的redis实例通过特定的协议连接到一起实现了分布式.集群化的目 ...

  9. redis 学习笔记(1)

    redis持久化 snapshot数据快照(rdb) 这是一种定时将redis内存中的数据写入磁盘文件的一种方案,这样保留这一时刻redis中的数据镜像,用于意外回滚.redis的snapshot的格 ...

随机推荐

  1. 帮你克服web字体选择焦虑症

    1.背景 前端时间产品经理问我,移动端web默认字体有哪些,哪些字体不侵权?我当时感觉这方面的知识很匮乏,只能回答出微软雅黑和苹方简体,平常写代码时,没怎么留意过font-family设置的字体属性, ...

  2. JavaScript的执行过程(深入执行上下文、GO、AO、VO和VE等概念)

    JavaScript的执行过程 前言 编写一段JavaScript代码,它是如何执行的呢?简单来说,JS引擎在执行JavaScript代码的过程中需要先解析再执行.那么在解析阶段JS引擎又会进行哪些操 ...

  3. HTML、CSS、Javascript、jQuery、Xml

    HTML HTML简介 Hyper Text Markup Language (超文本标记语言)简写:HTML.通过标签来标记要显示的网页中的各个部分.网页文件本身是一种文本文件,通过在文本文件中添加 ...

  4. leetcode刷题目录

    leetcode刷题目录 1. 两数之和 2. 两数相加 3. 无重复字符的最长子串 4. 寻找两个有序数组的中位数 5. 最长回文子串 6. Z 字形变换 7. 整数反转 8. 字符串转换整数 (a ...

  5. 《剑指offer》面试题16. 数值的整数次方

    问题描述 实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 示例 1: 输入: 2.0 ...

  6. Solon Web 开发,八、校验、及定制与扩展

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  7. win+ r 命令

    Win 键+R calc:计算器 notepad:记事本 mspaint:画图 cmd:控制台 control:控制面板 desk.cpl:打开控制面板中的桌面设置 main.cpl:鼠标设置 ine ...

  8. 【经验总结】CodeBlocks使用mingw64

    CodeBlocks使用 标签:c++ 一.安装并配置mingw-w64 使用中发现CB默认的编译器版本过低,c++11的一些东西无法使用,比如string中的stoi函数,因此尝试安装新版本的编译器 ...

  9. python 使用sqlite,ConfigParser实例

    此实例是本人公司真实场景,使用了VNC,ngrok 技术实现内网穿透,本例是对内网穿透的使用: 此例的最终效果是对于处于各地内网终端实现远程桌面监控及操作: 目前世面上也有一些软件实现了内网穿透(向日 ...

  10. IoC容器-Bean管理XML方式(p名称空间注入)

    5,p名称空间注入(简化xml配置) (1)使用p名称空间注入,可以简化基于xml配置方式 (了解实际用不多) 第一步 添加 p 名称空间在配置文件中   第二步 进行属性注入,在bean标签里面进行 ...