Redis分片集群和亿级访问量数据处理

news2024/9/25 21:28:52

一、redis分片集群

1.简介

  • 业务场景,需要存储50G的数据。对于内存和硬盘配置不足,选用两种方式
    • 一种:纵向扩展:加内存,加硬盘,提高CPU。简单、直接。RDB存储效率要考虑。成本要考虑。
    • 二种:横向扩展:加实例。

2.配置

  • 步骤1:创建一个mycluster目录,复制redis.conf文件
mkdir mycluster
cp /opt/redis-6.2.6/redis.conf redis.conf
  •  将后台启动打开
  • 步骤2:创建一个redis6379.conf
include redis.conf
pidfile "/var/run/redis_6379.pid"
port 6379
dbfilename "dump6379.rdb"
#打开集群模式
cluster-enabled yes
#设定节点配置文件
cluster-config-file nodes-6379.conf
#设定节点失联时间,超过,会自动进行主从切换
cluster-node-timeout 15000
  • 步骤3:根据6379的配置文件,再配置5个不同的端口
:%S/原内容/要替换的内容
:%s/6379/6380
  • 步骤4:修改redis.conf配置文件,将bind ip地址加入
打开bind 127.0.0.1
加入 192.168.44.4
  • 步骤5 启动六个服务,保证六个服务启动成功
  • 步骤6 将六个服务合成一个集群
redis-cli --cluster create --cluster-replicas 1 192.168.245.129:6379 
192.168.245.129:6380 192.168.245.129:6381 192.168.245.129:6579 
192.168.245.129:6580 192.168.245.129:6581

3.Hash Slot

3.1简介

  • 在使用redis cluster方案中,一个分片集群有16384个哈希槽。
  • 根据键值对的key,按照CRC16算法计算一个16bit的值。再用这个值对16384取模运算,得到的数代表对应编号的hash slot

3.2部署方案

  • cluster create命令创建集群时,redis会自动把这些hash slot平均分布在集群实例上。如果集群中有N个实例(主库),每个实例上分配到的hash slot就是16384/N
  • 使用cluster addslos 手工分配哈希槽。

4.集群中的数据操作

  • 步骤1:使用集群方式启动redis的命令行, -c参数
redis-cli -c -p 6379
  • 步骤2:向redis中设置一个键值对,key会经过运算后,得到相应的hash slot进行存储
set k1 v1
set k2 v2
get k1
get k2
  • 步骤3:测试向集群中加入多个key-value,由于在不同的hash slot,此时会报错
mset k3 v3 k4 v4 k5 v5
  • 要通过{}来定义组的概念,使用key{}内相同内容的键值对放在一个slot
mset name{user:001} zhangsan age{user:001} 18 gender{user:001} man
  • 步骤4:获取key中的值
get k1
get name{user:001}

5.常用命令

  • cluster nodes:显示集群节点的配置信息
  • cluster keyslot < key>:获取key的哈希槽
  • cluster countkeysinslot < slot>:返回当前哈希槽中key的数量(仅查询当前redis实例)
  • cluster getkeysinslot < slot>< count>:返回当前槽中指定的count数量的key

6.故障演示

  • 步骤1:将6379宕机,以集群方式登录6380
127.0.0.1:6379>shutdown
exit
redis-cli -c -p 6380
  • 步骤2:使用cluster nodes查看节点状态,6379的从机6581变成了主机
  • 步骤3: 6379再次启动,启动后,6379变成了6581的从机
  • 如果有一段hash slot的主从节点都宕机,redis是否继续工作?
  • 通过下面配置,默认是yes,如果主从都挂掉,整个集群就都挂掉
  • 如果是no,就表示该hash slot数据全部都不能使用,也无法存储
cluster-require-full-coverage yes

二、亿级访问量数据处理

1.场景描述

手机 APP 用户登录信息,一天用户登录 ID 或设备 ID
电商或者美团平台,一个商品对应的评论
文章对应的评论
APP 上有打卡信息
网站上访问量统计
统计新增用户第二天还留存
商品评论的排序
月活统计
统计独立访客 (Unique Vistitor UV)

2.集合的统计模式

四种统计模式:聚合统计、排序统计、二值状态统计、基数统计

2.1聚合统计

  • 多个集合的交集、差集、并集
  • set集合,来存储所有登录系统的用户 user:id
  • set集合,来存储当日新增用户信息 user:id :20230503
  • 假设系统是2023年5月3日上线,统计当天用户
  • sadd user:id :20230503 1001 1002 1003 1004 1005
  • 统计总用户量
  • sunionstore user:id user:id user:id :20230503
  • 2天5月4日上线用户
  • sadd user:id :20230504 1001 1003 1006 1007
  • 统计当日新增用户
  • sdiffstore user:new user:id :20230504 user:id
  • 统计第一天登录,第二天还在的用户
  • sinterstore user:save user:id :20230503 user:id :20230504
  • 统计第一天登录,第二天流失的用户
  • sdiffstore user:rem user:id : 20230503 user:id :20230504

2.2排序统计

  • ListSet Hash ZSet四种集合中,ListZset是属于有序的集合
  • 一种使用List,通过lpush加入
  • 一种使用Zset,按分数权重处理

2.3二值状态统计

  • 统计疫苗接种人数(没有接种0 接种1)、打卡(没有打卡0 打卡1)、签到。
  • bit 1byte=8bit
  • redis提供一种扩展数据类型 bitmap
  • 可以把bitmap看到是一个bit数组
  • 常用命令:
    • setbit
    • getbit
    • bitcount
  • 统计一下,20221月份的一个上班打卡情况
setbit user:sign:202201 0 1
setbit user:sign:202201 2 1
setbit user:sign:202201 3 1
getbit user:sign:202201 0 //1
getbit user:sign:202201 1 //0
bitcount user:sign:202201 //4
  • 统计1亿个用户,10天签到情况
  • bitop
  • 操作
setbit user:sign:1222 0 1

..........

bitop and signmap user:sign:1222 user:sign:1223 user:sign:1224

 2.4基数统计

  • 统计一个集合中不重复的元素个数,例如统计网页的UV
  • 第一种,使用set或者hash来完成统计
  • sadd page1:uv u1001 u1002 u1003
  • scard page1:uv
  • 存在的问题:如果数据量非常大,且页面多,访问人数非常多,造成内存紧张
  • 第二种,Redis提供了HyperLogLoghll
  • HyperLogLog是用于统计基数的一种数据集合类型。优点在于当集合元素非常多,使用hll所需要的空间是固定且很小,使用12kb内存,可以存储2^64个元素的基数。缺点在于统计规则是基于概率完成的。会有0.81%左右的误差。如果统计1000万次,实际上可以是1100万 或900万人。
  • 命令
pfadd page1:uv u1001 u1002 u1003
pfcount page1:uv
pfadd page2:uv u1001 u1004
pfmerge page:uv page1:uv page2:uv
pfcount page:uv

2.5小结

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/487805.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

016+limou+C语言常用的32个关键字

0.前言 本博文是在对C语言有一定深入了解后&#xff0c;对C语言最为主要的32个关键字进行了简要的概述和一些容易被忽略的细节研究&#xff0c;您可以当作学习或复习C语言基础使用&#xff08;毕竟关键字就是构成C语言语法的基石&#xff09;&#xff0c;也可以提出您所不认同…

java版企业电子招投标采购系统源码之首页设计

功能模块&#xff1a; 待办消息&#xff0c;招标公告&#xff0c;中标公告&#xff0c;信息发布 描述&#xff1a; 全过程数字化采购管理&#xff0c;打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&#xff0c;为外部…

易岸教育:公务员两科目考试内容是什么?

&#xff08;一&#xff09;《行政能力测验》 《行政能力测验》分为常识判断、言语理解与表达、数量关系、推理判断、资料分析五大部分。 1、常识判断题共20道题&#xff0c;涵盖面广&#xff0c;内容丰富&#xff0c;可归纳为自然科学、社会科学、时事热点三大类。 2、语言…

风扇的气动性能简介

1 风扇的定义 & 分类 风扇是很常见的设备&#xff0c;应用于通风、设备散热等多种场景&#xff0c;典型如家用的电风扇、抽风机&#xff0c;各类电子设备的散热风扇等。 风扇是通过外力驱动叶片旋转引发气体运动的设备。根据AMCA Standard 210-16的规定&#xff0c;风扇对气…

一个滑模控制(SMC)实例及仿真

被控对象 考虑这么一个被控对象 J θ ( t ) u ( t ) d ( t ) J \ddot\theta(t) u(t) d(t) Jθ(t)u(t)d(t) 其中&#xff0c; J J J 为转动惯量&#xff0c; θ \theta θ 为角度&#xff0c; u u u 为控制量&#xff0c; d d d 为扰动&#xff0c;且 d ( t ) < D d(…

联想天逸510S-i5电脑如何重装windows系统

如果你的联想天逸510S-i5电脑出现了系统故障、病毒感染、运行缓慢等问题&#xff0c;你可能需要重装系统来解决。但是&#xff0c;联想天逸510S-i5电脑如何重装windows系统呢?本文将为你介绍两种方法&#xff1a;用U盘重装系统和用联想系统自带的重置功能。 ​ 联想天逸510S…

天气预报查询 API 提供个性化的天气服务的设计思路

引言 假设你是一个开发人员或公司&#xff0c;正在考虑开发一款天气应用程序&#xff0c;但你意识到市场上已经有很多竞争者在使用天气预报查询 API 来提供类似的服务&#xff0c;本文将一起探寻一些创新的方法来提高应用程序的竞争力。 扩大竞争力的一些建议 如果市面上已经…

java企业工程项目管理系统平台源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#…

OpenWrt SDK 制作与使用

OpenWrt SDK 制作与使用 参考资料&#xff1a;https://openwrt.org/docs/guide-developer/toolchain/using_the_sdk SDK 制作 make menuconfig 选中 SDK 然后编译 编译完后&#xff1a; bin/targets/sunxi/cortexa7/openwrt-sdk-sunxi-cortexa7_gcc-10.2.0_musl_eabi.Linux…

搭建大型分布式服务(四十六)利用mockito不启动SpringBoot项目下进行单元测试

系列文章目录 文章目录 系列文章目录前言一、本文要点二、开发环境三、编写真实类四、编写测试类四、小结 前言 SpringBoot支持集成Mockito做单元测试&#xff0c;有时候SpringBoot有很多外部依赖&#xff0c;在本地很难启动或者启动时间很长&#xff0c;而我们只想对某个方法…

Lattics ——一款简单易用、好看强大的知识管理工具

如何选择一款适合自己的知识管理工具&#xff1f; 对于很多用户而言&#xff0c;在追求效率的路上&#xff0c;经常需要一款适合自己的知识管理工具。然而&#xff0c;随着工具市场的发展&#xff0c;各种新兴工具层出不穷。在传统领域&#xff0c;有印象笔记、Onenote 为代表…

ChatGPT实现知识图谱生成

知识图谱生成 在之前章节中&#xff0c;我们尝试过让 ChatGPT 对一段文本做实体识别和词性分析&#xff0c;结果很不错。但如果是需要长期留存下来&#xff0c;后续在不同场景下快速查询分析&#xff0c;最好还是要把数据存入到专门的图数据库中&#xff0c;才能方便随时读取。…

SpringCloud学习(八)——Docker

文章目录 1. 认识Docker1.1 容器1.2 Linux容器1.3 Docker 2. 配置Docker2.1 安装Docker2.2 启动Docker2.3 配置镜像加速 3. Docker镜像操作3.1 拉取镜像3.2 镜像的打包和加载3.3 查看帮助文档 4. 容器命令4.1 运行容器4.2 进入容器4.3 数据卷 5. 自定义镜像5.1 Dockerfile语法5…

svo论文解读

SVO: Semi-Direct Visual Odometry for Monocular and Multi-Camera Systems 2016TRO MOTION ESTIMATION 1 Sparse Image Alignment 从上一帧的特征投影到当前帧&#xff0c;最小化重投影误差计算帧间位姿&#xff08;patch44&#xff09; 2 Relaxation Through Feature Alig…

Vue案例

1. 查询所有 1.1 采用dom方式&#xff0c;拼字符串操作写ajax请求 这种方法书写麻烦&#xff0c;采用Vue的方式书写 <script>//1. 当页面加载完成后&#xff0c;发送ajax请求window.onload function () {//2. 发送ajax请求axios({method:"get",url:"http…

利用ECharts实现winform中的可视化图表

利用ECharts实现winform中的可视化图表 背景思路第一步&#xff08;先搞一个能展示图表的html文件&#xff09;第二步&#xff08;封装到winform中&#xff09;第三步 写代码第四步 winfrom与html交互在html中增加方法 如下在winfrom中增加调用方法数据文件代码 完整的运行效果…

Python教程——Python本地环境安装

文章目录 简介安装Python下载安装验证安装结果 手动添加环境变量安装问题 简介 python官网&#xff1a;https://www.python.org/ Python Windows下载地址&#xff1a;https://www.python.org/downloads/windows/ Python 官方文档&#xff1a;https://www.python.org/doc/ Pytho…

man,cp,mv,alias,more,less,head,tail指令与文件片段读取和管道的初步介绍

tips 文件夹就是目录定位某个文件的位置&#xff0c;本质上就是在Linux的多叉树目录结构下去定位它的位置文件名主干&#xff08;不考虑前缀路径&#xff09;以. 开头的文件就被称为隐藏文件任何一个目录下面都有一个.隐藏文件与…隐藏文件无论window还是Linux&#xff0c;常识…

C语言文件操作【基础知识 + 顺序读写 + 文件版通讯录】

全文目录 &#x1f600; 前言&#x1f914; 什么是文件&#x1f636; 程序文件&#x1f636; 数据文件&#x1f636; 文件名 &#x1f928; 文件指针&#x1f92b; 文件的打开和关闭&#x1f611; fopen 打开文件&#x1f4d9; **mod的规律&#xff1a;** &#x1f611; fclose…

registry私有仓库搭建

目录 一、搭建本地仓库 1、首先下载registry镜像 2、在daemon.json文件中添加私有镜像仓库地址 3、运行registry容器 4、为镜像打标签 5、上传到私有仓库 6、列出私有仓库的所有镜像 7、列出私有仓库的centos 镜像有哪些tag 8、先删除原有的centos的镜像&#xff0c;再…