Redis基数

基数-------HyperLogLog

  • 基数是一种算法。举个例子,一本英文著作由数百万个单词组成,你的内存却不足以存储它们,那么我们先分析一下业务。英文单词本身是有限的,在 这本书的几百万个单词中有许多重复单词,扣去重复的单词,这本书中也就是几千到一万多个单词而已,那么内存就足够存储它们了。比如数字集合{1, 2,5,7,9,,1,5,9}的基数集合为{1,2,5,7,9}那么基数(不重复元素)就是5,基数的作用是评估大约需要准备多少个存储单元去存储数据, 但是基数的算法一般会存在一定的误差(一般是可控的)。Redis对基数数据结构的支持是从版本2.8.9开始的。
  • 基数并不是存储元素,存储元素消耗内存空间比较大,而是给某一个有重复元素的数据集合(一般是很大的数据集合)评估需要的空间单元娄,所以它 没有办法进行存储,加上在工作中用得不多,所以简要介绍一下Redis的HyperLogLog命令就可以了。

Redis的HyperLogLog命令

1 --------------------------------------------------------------------------------------------------------------- 2 命令 说明 备注 3 pfadd key element 添加指定元素到HyperLogLog 如果已经存储元素,则返回为0,添加失败 4 pfcount key 返回HyperLogLog的基数值 ---------- 5 pfmerge desKey key1[key2 ...] 合并多个HyperLogLog,并将其保存在desKey中 ---------- 6 ---------------------------------------------------------------------------------------------------------------

命令行

1127.0.0.1:6379> pfadd h1 a 2(integer) 1 3127.0.0.1:6379> pfadd h1 b 4(integer) 1 5127.0.0.1:6379> pfadd h1 c 6(integer) 1 7127.0.0.1:6379> pfadd h1 d 8(integer) 1 9127.0.0.1:6379> pfadd h1 a 10(integer) 0 11127.0.0.1:6379> pfcount h1 12(integer) 4 13127.0.0.1:6379> pfadd h2 a 14(integer) 1 15127.0.0.1:6379> pfadd h2 z 16(integer) 1 17127.0.0.1:6379> pfmerge h3 h1 h2 18OK 19127.0.0.1:6379> pfcount h3 20(integer) 5 21127.0.0.1:6379>

在Spring中操作基数

1 @Test 2 public void testHyperLogLog() { 3 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); 4 RedisTemplate redisTemplate = applicationContext.getBean(RedisTemplate.class); 5 redisTemplate.opsForHyperLogLog().add("HyperLogLog", "a", "b", "c", "d", "a"); 6 redisTemplate.opsForHyperLogLog().add("HyperLogLog2", "a"); 7 redisTemplate.opsForHyperLogLog().add("HyperLogLog2", "z"); 8 Long size = redisTemplate.opsForHyperLogLog().size("HyperLogLog"); 9 System.err.println(size); 10 size = redisTemplate.opsForHyperLogLog().size("HyperLogLog2"); 11 System.err.println(size); 12 redisTemplate.opsForHyperLogLog().union("des_key", "HyperLogLog", "HyperLogLog2"); 13 size = redisTemplate.opsForHyperLogLog().size("des_key"); 14 System.err.println(size); 15 }
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

python常用150个英文单词

需要学习资料和视频加我微信:156758039571.python蟒蛇2.downlaods下载3.install安装4.customize自定义5.path环境变量:路径6.optional可选的7.feature特性特点8.documentation文档9.associate关联10.shortcuts快捷方式11

Java集合,ConcurrentHashMap底层实现和原理(常用于并发编程)

概述ConcurrentHashMap常用于并发编程,这里就从源码上来分析一下ConcurrentHashMap数据结构和底层原理。在开始之前先介绍一个算法,这个算法和Concurrent的实现是分不开的。CAS算法:CAS是英文单词CompareAndSwap的缩写,翻译过来就是比较并替换。CAS机制当中使用

JDK源代码以及200多部软件著作中出现的以连字符构造的1011个合成词

JDK源代码以及200多部软件著作中出现的以连字符构造的1011个合成词,单词后面跟的是词频。superword是一个Java实现的英文单词分析软件,主要研究英语单词音近形似转化规律、前缀后缀规律、词之间的相似性规律等等。(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgi