高并发核心技术Redis系列(三)--------基本知识(下)

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
日志服务 SLS,月写入数据量 50GB 1个月
简介: 在我们做站点流量统计的时候一般会统计页面UV(独立访客:unique visitor)和PV(即页面浏览量:page view)。

9 新数据类型-Hyperloglog

9.1 简介

在我们做站点流量统计的时候一般会统计页面UV(独立访客:unique visitor)和PV(即页面浏览量:page view)。

什么是基数?

数据集{1,2,5,7,5,7,9},那么这个数据集的基数集为{1,2,5,7,9},基数(不重复元素)为5,基数估计就是在误差可接受范围内,快速计算基数。

如果是通过Redis来处理,我们可以使用String类型然后自增计数即可达到统计PV,统计UV可以使用Set,每个用户id是唯一的可以放到这个集合里。

以上方案虽然结果准确,但随着数据不断增加,导致占用的内存空间越来越大,对于非常大的数据集是不合适的。

Hyperloglog 是一种基数估算统计,在输入元素的数量特别巨大时,计算基数所需的空间是固定的,并且很小。

在Redis中,每个Hyperloglog 只占用12KB内存,就可以计算接近 个不同元素的基数。

因为HyperLogLog 只会更具输入元素来计算基数,而不会存储输入元素本身,所以Hyperloglog 不能像集合那样,返回输入的各个元素。

9.2 常用命令

1. pfadd key element1 element2……将所有元素参数添加到 Hyperloglog 数据结构中。

如果至少有个元素被添加返回 1, 否则返回 0。

pfadd book1 java c++ 添加两个元素,当前book1数量为2
pfadd book1 java php 添加一个元素,当前book1数量为3

2. pfcount key1 key2……计算Hyperloglog 近似基数,可以计算多个Hyperloglog ,统计基数总

数。

pfcount book1 计算book1的基数,结果为3
pfadd book2 chinese math 添加两个元素到book2中
pfcount book1 book2 统计两个key的基数总数,结果为5

3. pfmerge destkey sourcekey1 sourcekey2……将一个或多个Hyperloglog(sourcekey1) 合并成一个Hyperloglog (destkey )。

比如每月活跃用户可用每天活跃用户合并后计算。

pfmerge book book1 book2 将book1和book2合并成book,结果为5

10 Redis配置文件详解

10.1 units单位

配置大小单位,开头定义基本度量单位,只支持bytes,大小写不敏感。

2345_image_file_copy_122.jpg

10.2 #### INCLUDES

Redis只有一个配置文件,如果多个人进行开发维护,那么就需要多个这样的配置文件,这时候多个配置文件就可以在此通过 include /path/to/local.conf 配置进来,而原本的 redis.conf 配置文件就作为一个总闸。

2345_image_file_copy_123.jpg

10.3 #### NETWORK

1. bind:绑定redis服务器网卡IP,默认为127.0.0.1,即本地回环地址。访问redis服务只能通过本机的客户端连接,而无法通过远程连接。如果bind选项为空的话,那会接受所有来自于可用网络接口的连接。

2345_image_file_copy_124.jpg

2. protected-mode:本机保护模式,值为yes时只能本机访问不能远程访问。

2345_image_file_copy_125.jpg

3. port:指定redis运行的端口,默认是6379。

2345_image_file_copy_126.jpg

4. timeout:设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接。默认值为0,表示不关闭。

2345_image_file_copy_127.jpg

10.4 #### GENERAL

1. daemonize:设置为yes表示指定Redis以守护进程的方式启动(后台启动)。

2345_image_file_copy_128.jpg

2. pidfile:配置PID文件路径,当redis作为守护进程运行的时候,它会把 pid 默认写到

/var/redis/run/redis_6379.pid 文件里面。

2345_image_file_copy_129.jpg

3. loglevel :定义日志级别。默认值为notice,有如下4种取值:

         debug(记录大量日志信息,适用于开发、测试阶段)。

        verbose(较多日志信息)。

        notice(适量日志信息,使用于生产环境)。

        warning(仅有部分重要、关键信息才会被记录)。

2345_image_file_copy_130.jpg

4. logfile :配置log文件地址,默认打印在命令行终端的窗口上。

2345_image_file_copy_131.jpg

5. databases:设置数据库的数目。

2345_image_file_copy_132.jpg

10.5 #### SECURITY

 1. requirepass:设置redis连接密码。

比如: requirepass 123 表示redis的连接密码为123。

10.6 其他配置

1. maxclients :设置客户端最大并发连接数,默认无限制,Redis可以同时打开的客户端连接数为

Redis进程可以打开的最大数量。 如果设置 maxclients为0 ,表示不作限制。当客户端连接数到达

限制时,Redis会关闭新的连接并向客户端返回错误信息。

2345_image_file_copy_133.jpg

2. maxmemory:设置Redis的最大内存,如果设置为0 。表示不作限制。通常是配合maxmemory-policy参数一起使用。

2345_image_file_copy_134.jpg

3. maxmemory-policy :当内存使用达到maxmemory设置的最大值时,redis使用的内存清除策

略。

清除策略包括:

  • volatile-lru:利用LRU算法移除设置过过期时间的key (LRU:最近使用 Least Recently Used )
  • allkeys-lru:利用LRU算法移除任何key
  • volatile-random:移除设置过过期时间的随机key
  • allkeys-random:移除随机key
  • volatile-ttl:移除即将过期的key(minor TTL)
  • noeviction:不移除任何key,只是返回一个写错误 ,默认选项

2345_image_file_copy_135.jpg

11 发布与订阅

11.1 什么是发布与订阅

Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。

Redis 客户端可以订阅任意数量的频道。

11.2 Redis的发布与订阅

1. 客户端订阅频道

2345_image_file_copy_136.jpg

2. 当给这个频道发送消息后,消息就会发送给订阅的客户端

2345_image_file_copy_137.jpg

3. Redis中发布与订阅命令

订阅:subscribe channel 订阅频道channel。

发布:publish channel msg向频道channel 发送一条msg消息。

11.3 发布与订阅命令行实现

1. 打开一个客户端订阅channel 1频道。

2345_image_file_copy_138.jpg

2. 打开另一个客户端给channel 1频道发送一条hello消息。

2345_image_file_copy_139.jpg

返回1代表订阅者数量。

3. 打开第一个客户端可以看到发送的消息

2345_image_file_copy_140.jpg

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
2月前
|
消息中间件 缓存 NoSQL
Redis 高并发竞争 key ,如何解决这个难点?
本文主要探讨 Redis 在高并发场景下的并发竞争 Key 问题,以及较为常用的两种解决方案(分布式锁+时间戳、利用消息队列)。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Redis 高并发竞争 key ,如何解决这个难点?
|
2月前
|
缓存 NoSQL 中间件
redis高并发缓存中间件总结!
本文档详细介绍了高并发缓存中间件Redis的原理、高级操作及其在电商架构中的应用。通过阿里云的角度,分析了Redis与架构的关系,并展示了无Redis和使用Redis缓存的架构图。文档还涵盖了Redis的基本特性、应用场景、安装部署步骤、配置文件详解、启动和关闭方法、systemctl管理脚本的生成以及日志警告处理等内容。适合初学者和有一定经验的技术人员参考学习。
243 7
|
3月前
|
移动开发 NoSQL 网络协议
Redis 管道技术
10月更文挑战第21天
29 3
|
3月前
|
缓存 监控 负载均衡
如何解决Redis热点Key问题?技术干货分享
【10月更文挑战第2天】在Redis的使用过程中,热点Key问题是一个常见的性能瓶颈。热点Key指的是那些被频繁访问的Key,它们可能导致Redis服务器的负载不均衡,进而影响整体性能。本文将深入探讨热点Key问题的成因、影响以及多种解决方案,帮助读者在实际工作中有效应对这一挑战。
137 3
|
3月前
|
存储 缓存 NoSQL
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
81 4
|
3月前
|
缓存 NoSQL Ubuntu
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
67 3
|
缓存 NoSQL Redis
Redis高并发和高可用
Redis高并发和高可用
107 0
|
监控 NoSQL Redis
怎么保证Redis的高并发高可用
怎么保证Redis的高并发高可用
115 0
|
缓存 监控 NoSQL
|
缓存 监控 NoSQL
关于Redis的几件小事 | 高并发和高可用
关于Redis的几件小事 | 高并发和高可用如果你用redis缓存技术的话,肯定要考虑如何用redis来加多台机器,保证redis是高并发的,还有就是如何让Redis保证自己不是挂掉以后就直接死掉了。
1137 0