avatar

Redis

Redis简介

Redis是完全开源免费的,遵守BSD协议,是一个高性能(NOSQL)的key-v
alue数据库, Redis是一个开源的使用ANSI C语言 编写、支持网络、可基于内
存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的API。从2010
年3月15日起,Redis 的开发工作由VMware主持。从2013年5月开始,Redis
的开发由Pivotal赞助。(Vmware 在资助看redis项目的开发和维护)


BSD是”Derkeley Software Distribution”的缩写,意思是“伯克利软件发行版”。
BSD开源协议是一个给于使用者很大自由的协议。可以自由的使用,修改源代码,也可以将修改后的代码
作为开源或者专有软件再发布。BSD代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允t许使用
者能改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业很友好的协议。

NoSQL介绍

NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数
据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态
网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由
于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规
模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

NoSQL数据库的四大分类

键值(Key-Value)存储数据库

这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指
向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA 只对部分值进行查询或更新的时候,Key/value 就显得效率低下了。
举例如: TokyoCabinet/Tyrant, Redis, Voldemort, Oracle BDp.

列存储数据库

这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特
点是指向了多个列。这些列是由列家族来安排的。如: Cassandra, HBase, Riak.

文档型数据库

文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种 键值存储
相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。
文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。如: CouchDB, MongoDb. 国内也有文档型数据库SequoiaDB,已经开源。

图形(Graph)数据库

图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图
形模型,并且能够扩展到多个服务器上。NoSQL 数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。
如: Neo4J, InfoGrid, Infinite Gr aph.


因此,我们总结NoSQL数据库在以下的这几种情况下比较适用:

  1. 数据模型比较简单;
  2. 需要灵活性更强的IT系统;
  3. 对数据库性能要求较高;
  4. 不需要高度的数据一致
  5. 对于给定key,比较容易映射复杂值的环境。

Redis与其他key - value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis 不仅仅支持简单的key-value类型的数据,同时还提供list, set, zset, hash 等数据结构的存储。
  • Redis 支持数据的备份,集群等高可用功能。

特点

  • 性能极高 - Redis 能读的速度是110000次/s,写的速度是81000次/s
  • 丰富的数据类型 - Redis 支持的类型String, List, Hash, Set及Ordered Set数据类型操作。
  • 原子-Redis 的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。
  • 单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  • 丰富的特性- Redis 还支持publish/subscribe,通知,key 过期等等特性。

Redis是一一个简单的, 高效的,分布式的,基于内存的缓存工具。
架设好服务器后,通过网络连接(类似数据库),提供Key - Value式缓存服务。
简单,是Redis突出的特色。
简单可以保证核心功能的稳定和优异。

Redis总结

redis单个key存入512M大小.
redis支持多种类型的数据结构(string list,hash set .zset)
redis是单线程 原子性
redis可以持久化因为使用了RDB和AOF机制
redis支持集群 而且redis支持库(0-15)16个库
redis还可以做消息队列比如聊天室 IM

企业级开发中:可以用作数据库、缓存(热点数据(经常会被查询,但是不经常被修改或者删除的数据)和消息中间件等大部分功能。

优点

  • 优点:
  • 丰富的数据结构
  • 高速读写,redis使用自己实现的分离器,代码量很短,没有使用lock(MySQL),因此效率非常高。

缺点

  • 持久化。Redis直接将数据存储到内存中,要将数据保存到磁盘上,Redis可以使用两种方式实现持久化过程。定时快照(snapshot): 每隔一段时间将整个数据库写到磁盘上,每次均是写全部数据,代价非常高。第二种方式基于语句追加(aof): 只追踪变化的数据,但是追加的log可能过大,同时所有的操作均重新执行一遍,恢复复速度慢。
  • 耗内存,占用内存过高。

Redis安装

Redis是C语言开发,安装Redis需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有 gcc环境,需要安装gcc.

Linux系统上安装gcc

1
yum install -y gcc gcc-c++

将Redis通过 Xftp 上传到Linux

解压Redis 并 进入目录 并 编译(也可以分开运行)

1
tar -zxvf redis-5.0.7.tar.gz && cd redis-5.0.7 && make

安装编译后的文件

1
make PREFIX=/usr/local/redis install

没有报错的话就安装完成了

Redis启动

启动Redis服务

进入对应的安装目录

1
cd /usr/local/redis

执行命令

1
./bin/redis-server

这就可以看到Redis成功启动

Port为端口号

启动Redis的客户端

进入Redis客户端 (Clone Session 克隆一个窗口)

进入对应的安装目录

1
cd /usr/local/redis

执行命令

1
./bin/redis-cli

看到这个就表示启动成功了

启动Redis客户端命令

1
redis-cli -h IP地址 -p端口

退出客户端命令

1
Ctrl+c

检测是否服务端启动

启动redis 客户端,打开终端输入命令 redis-cli 该命令会连接本地的redis服务

使用 ping 命令检查是否成功

输出为PONG表示成功

Linux 配置 Redis

Redis的配置文件位于Redis 安装目录下,文件名为redis. conf (windows名
为redis. windows. conf)。

首先找到 Redis配置文件 redis.conf

打开终端输入ll 打印文件目录 找到 redis 安装目录,执行命令进入

1
cd redis-5.0.7

下一步就是把redis.conf复制到 redis安装目录下 与bin同级

1
cp redis.conf /usr/local/redis   这里是我的安装目录

复制完之后进入目录查看

Redis 配置至此全部完成

Redis.conf配置文件详解

redis. conf 配置项说明如下:

  1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程

    1
    daemonize no
  1. 当Redis以守护进程方式运行时,Redis 默认会把pid写入/var/run/redis pid文件,可以通过pidfile指定

    1
    pidfile /var/run/redis.pid
  1. 指定Redis监听端口,默认端口为6379,为什么选用6379作为默认端口,因为6379在手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz 的名字

    1
    port 6379
  1. 这玩意太多了不想写。。。。。。

https://blog.csdn.net/ymrfzr/article/details/51362125?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

使用命令查看 Redis.conf文件

1
less -mN redis.conf

bind 为 绑定 你的IP地址,表示Redis只有你才能连接

使用命令 / 在文件中搜索关键字

1
/关键字

daemonize no 表示不是以守护进程的方式运行

将这个改为 yes 表示以守护进程的方式运行

你就可以在启动redis服务的页面继续使用命令了,没有启用之前是不可以的

使用编程模式修改文件

使用命令 vim redis.conf 修改 文件 (在redis目录中)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
按ESC键 跳到命令模式,然后:

:w 保存文件但不退出vi

:w file 将修改另外保存到file中,不退出vi

:w! 强制保存,不推出vi

:wq 保存文件并退出vi

:wq! 强制保存文件,并退出vi

:q 不保存文件,退出vi

:q! 不保存文件,强制退出vi

:e! 放弃所有修改,从上次保存文件开始再编辑

i 修改
u 撤回

自定义配置Redis

下面几个默认配置必须修改

1
2
3
daemonized no 修改为 daemonized yes
bind 127.0.0.1 注释掉
requirepass 设置密码

Redis启动

服务端启动

在 /user/local/redis 目录下

1
./bin/redis-server ./redis.conf

查看已启动的进程

1
ps -ef | grep -i redis

客户端启动

同样是在 /user/local/redis 目录下

1
./bin/redis-cli

远程服务上执行命令

如果需要在远程redis 服务,上执行命令,同样我们使用的也是redis-cli 命令。

1
2
redis-cli -h host -p port -a password
redis-cli -h IP地址 -p 端口 -a 密码

本地登录

1
./bin/redis-cli -a yizhiduxiu

Redis关闭

  1. 断电、非正常关闭。容易数据丢失

    查询PID

    1
    ps -ef | grep -i redis
    1
    kill -9 PID 直接杀进程
  2. 正常关闭、数据保存

    1
    ./bin/redis-cli shutdown

    如果redis设置了密码,需要先在客户端通过密码登录,再进行 shutdown即可关闭

Redis命令描述

Redlis命令用于在redis服务上执行操作。
要在redis服务上执行命令需要一个 redis客户端。
Redis客户端在我们之前下载的的redis的安装包中。

Redis键 key

Redis键命令用于管理redis的键
DEL key
该命令用于在key 存在时删除key。

DUMP key
序列化给定key,并返回被序列化的值。

EXISTS key
检查给定key 是否存在。

EXPIRE key seconds
为给定key设置过期时间(以秒计)。

PEXPIRE key milliseconds
设置key的过期时间以毫秒计。

TTL key
以秒为单位,返回给定key 的剩余生存时间(TL, time to live) -1为永久有效 -2为无效

PTTL key
以毫秒为单位返回key的剩余的过期时间。

PERSIST KEY

移除key的过期时间,key 将持久保持

KEYS pattern
查找所有符合给定模式( pattern)的 key 。
keys通配符 获取所有与pattern匹配的key,返回所有与该匹配
通配符:
*代表所有
?表示代表-一个字符
RANDOMKEY
从当前数据库中随机返回一个key。

RENAME key newkey
修改Key的名称

MOVE key db
将当前数据库的key 移动到给定的数据库db 当中

select 0

表示切换数据库 0为第一个

type key

查看类型

flushdb

删除数据库内所有数据

应用场景

EXPIRE key seconds
1、限时的优惠活动信息
2、网站数据缓存(对于一些需要定时更新的数据,例如:积分排行榜)
3、手机验证码
4、限制网站访客访问频率(例如: 1分钟最多访问10次)

redis单个 key 存入 512M 大小

key命名规范

1.key不要太长,尽量不要超过1024字节,这不仅消耗内存,而且会降低查找的效率;
2.key也不要太短,太短的话,key的可读性会降低;
3.在一个项目中,key 最好使用统一的命名模式, 例如user:123:password;

user 表名 123 id password 对应的数据

4.key区分大小写

Redis数据类型

String

简介

string是redis最基本的类型,一个key对应一个value.
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象
string类型是Redis最基本的数据类型,一个键最大能存储512MB。
二进制安全是指,在传输数据时,保证二进制数据的信息安全,也就是不被篡
改、破译等,如果被攻击,能够及时检测出来

二进制安全特点:
1、编码、解码发生在客户端完成,执行效率高
2、不需要频繁的编解码,不会出现乱码

String命令

赋值语法:

SET KEY_NAME VALUE
Redis SET命令用于设置给定key 的值。如果key已经存储值,SET 就覆写旧值,且无视类型

SETNX key value //解决分布式锁 方案之一
只有在key不存在时设置key 的值。Setnx ( SET if Not eXists)命令 在指定的key 不存在时,为key设置指定的值,相当于创建一个key并赋值

MSET key value [key value …]
同时设置一个或多个key -value对

取值语法:

GET KEY_ NAME
Redis GET命令用于获取指定key 的值。如果key不存在,返回nil。如果key储存的
值不是字符串类型,返回一个错误。

GETRANGE key start end

用于获取存储在指定key 中字符串的子字符串。字符串的截取范围由start 和end两个
偏移量决定(包括start 和end在内)

GETBIT key offset
对key所储存的字符串值,获取指定偏移量上的位(bit)

MGET key1 [key2..]
获取所有(一个或多个)给定key 的值

GETSET语法:GETSET KEY_ NAME VALUE
Getset命令用于设置指定key 的值,并返回key 的旧值,当key 不存在时,返回nil

STRLEN key
返回key所储存的字符串值的长度

删除语法:

DEL KEY_Name

删除指定的 key 如果 删除成功 则返回一个数字

自增/自减:

INCR KEY_ Name
Incr命令将key中储存的数字值增1。如果key不存在,那么key的值会先被初始化为
0 ,然后再执行INCR操作

自增: INCRBY KEY_Name增量值
Incrby命令将key中储存的数字加上指定的增量值

自减: DECR KEY_NAME 或 DECYBY KEY_NAME 减值
decR命令将key中储存的数字减1

字符串拼接: APPEND KEY_NAME VALUE
Append命令用于为指定的key 追加至未尾,如果不存在,为其赋值

应用场景

1、String通常用于保存单个字符串或JSON字符串数据
2、因String是二进制安全的,所以你完全可以把一个图片文件的内容作为字符串来存储
3、计数器(常规key-value缓存应用。常规计数:微博数,粉丝数)
INCR等指令本身就具有原子操作的特性,所以我们完全可以利用redis的INCR、INCRBY、DECR、
DECRBY等指令来实现原子计数的效果。假如,在某种场景下有3个客户端同时读取了mynum的值(值为2),然后对其同时进行了加1的操作,那么,最后mynum的值一定是5。不少网站都利用redis的这个特性来实现业务.上的统计计数需求。

哈希(Hash)

简介

Redis hash是一个string类型的 field和value 的映射表,hash 特别适合用于存储对象。Redis 中每个hash可以存储2的32次方-1 键值对(40 多亿)
可以看成具有KEY和VALUE的MAP容器,该类型非常适合于存储值对象的信息,
如: uname, upass, age等。该类型的数据仅占用很少的磁盘空间(相比于JSON)

Hash命令

赋值语法:

HSET KEY FIELD VALUE //为指定 的KEY,设定FILD/VALUE
HMSET KEY FIELD VALUE [FIELD1, VALUE1]…..同时将多个field-value(域-值)对设置到哈希表key中。
hmset users uname guo age 20 address “北京市”
其中 String可以覆盖 hmset,反之会报错

取值语法:

HGET KEY FIELD //获取存 储在HASH中的值,根据FIELD得到VALUE
HMGET key field[field1] //获取 key所有给定字段的值
HGETALL key //返回HASH表中所有的字段和值
HKEYS key //获取所有 哈希表中的字段
HLEN key // 获取哈希表中字段的数量

删除语法

DEL KEY

直接删除整个KEY

HDEL KEY FIELD

删除某一个属性

其它语法:

HSETNX key field value
只有在字段field不存在时,设置哈希表字段的值

HINCRBY key field increment
为哈希表key中的指定字段的整数值加上增量increment。

HINCRBYFLOAT key field increment
为哈希表key中的指定字段的浮点数值加上增量increment。

HEXISTS key field

查看哈希表 key中,指定的字段是否存在

应用场景

常用于存储对象

List

简介

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)一个列表最多可以包含2得32次方- 1个元素(4294967295,每个列表超过40亿个元素) 类似JAVA中的LinkedList

命令

赋值语法

LPUSH key value1 [value2] //将 一个或多个值插入到列表头部(从左侧添加)
RPUSH key value1 [value2] //在列表 中添加一个或多 个值(从右侧添加)
LPUSHX key value //将一个值插入到已存在的列表头部。如果列表不在,操作无效
RPUSHX key value //一个值插入已存在的列表尾部(最右边)。如果列表不在,操作无效。

取值语法

LLEN key //获取列表长度
LINDEX key index //通过索 引获取列表中的元素
LRANCE key start stop //获 取列表指定范围内的元素

描述:返回列表中指定区间内的元素,区间以偏移里START和END指定。其中0表示表的第一个元素,1表示列表的第二个元素,以此类推。也可以使用负数下标,以-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。

删除语法

LPOP key移出并 获取列表的第一个元素(从左侧删除)

RPOP key移出并 获取列表的最后一个元素(从右侧删除)

BLPOP key1 [key2 ] timeout
移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。timeout为秒

BRPOP key1 [key2 ] timeout
移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

LTRIM key start stop
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

修改语法

LSET key index value 通过索 引设置列表元素的值
LINSERT key BEFORE |AFTER world value 在列表的元素前或者后插入元素 描述:将值value 插入到列表key 当中,位于值world 之前或之后。

高级语法

RPOPLPUSH source destination
移除列表的最后一个元素,并将该元素添加到另一个列表并返回
示例描述:
RPOPLPUSH a1 a2 //a1 的最后元素移到a2的左侧
RPOPLPUSH a1 a1 //循环列表, 将最后元素移到最左侧

BRPOPLPUSH source destination timeout
从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它;如果列表没有元素
会阻塞列表直到等待超时或发现可弹出元素为止。

应用场景

项目常应用于: 1、对数据量大的集合数据删减2、任务队列
1、对数据量大的集合数据删减
列表数据显示、关注列表、粉丝列表、留言评价等..分页、热点新闻(Top5)等

利用LRANGE还可以很方便的实现分页的功能,在博客系统中,每片博文的评论也可以存入一个单独的list中。

Set类型

简介

Redis的Set 是String类型的无序集合。集合成员是唯-一的,这就意味着集合中不能出现重复的数据。Redis中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是0(1)。

集合中最大的成员数为2的32次方-1 (4294967295, 每个集合可存储40多亿个成员)。
类似于JAVA中的Hashtable 集合
redis的集合对象set的底层存储结构特别神奇,底层使用了intset 和hashtable两种数
据结构存储的,intset 我们可以理解为数组,hashtable 就是普通的哈希表(key 为set
的值,value 为null)。
intset内部其实是一个数组(int8_ t coentents[数组),而且存储数据的时候是有序的,
因为在查找数据的时候是通过二分查找来实现的。

命令

赋值语法

SADD key memberl [member2] 向集合添加一一个或多个成员

取值语法

SCARD key 获取集合的成员数
SMEMBERS key 返回集合中的所有成员
SISMEMBER key member 判断member元素是否是集合key 的成员(开发中:验证是否
存在判断)
SRANDMEMBER key [count]返回集合中一个或多个随机数

删除语法

SREM key member1 [member2] 移除集合中-一个或多个成员
SPOP key [count]移除并返回集合中的一个随机元素
SMOVE source destination member 将member元素从source 集合移动到destination 集合

差集语法

SDIFF key1 [key2] 返回给定所有集合的差集(左侧)
SDIFFSTORE destination key1 [key2]返回给定所有集合的差集并存储在destination 中

交集语法

SINTER key1 [key2]返回给定所有集合的交集(共有数据)
SINTERSTORE destination key1 [key2]返回给定所有集合的交集并存储在destination 中

并集语法

SUNION key1 [key2]返回所有给定集合的并集
SUNIONSTORE destination key1 [key2]所有给定集合 的并集存储在destination 集合中

应用场景

常应用于:对两个集合间的数据[计算]进行交集、并集、差集运算

1、以非常方便的实现如共同关注,共同喜好。二度好友等功能。对上面的所有
集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存储到一个新
的集合中。

2、利用唯一性,可以统计访问网站的所有独立IP

zset

有序集合(sorted set)

简介

1、Redis有序集合和集合一 样也是string类型元素的集合,且不允许重复的成员。
2、不同的是每个元素都会关联一个double类型的分数。 redis正是 通过分数来为集合中的成员进行从小到大的排序。
3、有序集合的成员是唯一的,但分数(score)却可以重复。
4、集合是通过哈希表实现的。集合中最大的成员数为2次方32 - 1 (4294967295,每个集合可存储40多亿个成员)。Redis的ZSet是有序、 且不重复
(很多时候,我们都将redis中的有序集合叫做zsets,这是因为在redis中,有序集合相关的操作指令都是以z开头的)

命令

赋值语法:

ZADD key score1 member1 [score2 member2] : 向有序集合添加一个或多个成员,或者更新已存在成员的分数

取值语法:

ZCARD key : 获取有序集合的成员数
ZCOUNT key min max :计算在有序集合中指定区间分数的成员数
ZRANK key member : 返回有序集合中指定成员的索引
ZRANGE key start stop [WITHSCORES] :通过索引区间返回有 序集台成指定区间内的成员(低到高)
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] :通过分数返回有序集合指定区间内的成员
ZREVRANGE key start stop [WITHSCORES] :返回有序集中指定区间内的成员 ,通过索引,分数从高到底
ZREVRANGEBYSCORE key max min [WITHSCORES] : 返回有序集中指定分数区间内的成员,分数从高到低排序

删除语法:

DEL key :移除集合

ZREM key member [member . ..] :移除有序集合中的一一个或多个成员
ZREMRANGEBYRANK key start stop :移除有序集合中给定的排名区间的所有成员(第一名是0) (低到高排序)
ZREMRANGEBYSCORE key min max :移除有 序集合中给定的分数区间的所有成员

ZINCRBY key increment member :增加memeber元素的分数increment,返回值是更改后的分数

应用场景

常应用于:排行榜
销量排名,积分排名等
1、比如twitter的public timeline可以以发表时间作为score来存储,这样获取时就是自动按时间排好序的。
2、比如一个存储全班同学成绩的Sorted Set ,其集合value可以是同学的学号,而score就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。
3、还可以用Sorted Set来做带权重的队列,比如普通消息的score为1 ,重要消息的score为2 ,然后工作线程可以选择按score的倒序来获取工作任务。让重要的任务优先执行。

HyperLogLog

简介

Redis: 在2.8.9版本添加了HyperLogLog 结构。
Redis HyperLoglog 是用来做基数统计的算法, HyperLoglog的优点是,在输入元素的数量或者体积非常非常大时,计算基数。所需的空间总是固定的、并且是很小的。

在Redis里面,每个HyperLoglog 键只需要花费12 KB内存,就可以计算接近2的64次方个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。
但是,因为HyperLoglog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以HyperLoglog不能像集合那样,返回输入的各个元素。

小知识:
什么是基数?
比如數据集{1, 3,5, 7,5,7,8},那么这个数据集的基数集为{1,3,5 ,7, 8},基数(不重复元素)为5。
基数估计就是在误差可接受的范围内,快速计算基数。

为什么需要HyperLogLog

如果要統计1亿个數据的基数值,大约需要内存10000000/8/1024/1024约等于12M, 内存减少占用的效果显著。
然而统计一个对象的基数值需要12M,如果统计10000个对象,就需要将近120G,同样不能广泛用于大数据场最。

命令

PFADD key element [e1ement .. ] ;添加指定元表到 HyperLoglog 中
PFCOUNT key [key ..] :返回给定Hyperloglog 的基数估算值
PFMERGE destkey sourcekey [sourcekey .. :将多个HyperLoglog 合井为一个HyperlogLog

应用场景

基数不大,数据量不大就用不上.会有点大材小用浪费空间
有局限性,就是只能统计基数数量,而没办法去知道具体的内容是什么

1
2
3
4
5
6
统计注册IP数
统计每日访问IP数
统计页面实时UV數
统计在线用户数
统计用户每天搜索不同词条的个数
统计真实文章阅读数
文章作者:
文章链接: https://huohuohuohuohuohuo.github.io/2020/03/03/Redis/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
打赏
  • 微信
    微信
  • 支付寶
    支付寶

评论