Redis进阶

Redis之父安特雷兹

redis x.x.x第二位是偶数的是稳定版本

redis7安装单机物理机安装:

https://blog.csdn.net/G189D/article/details/129185947

数据类型

bitmap

统计二值状态的数据类型

最大位数2^32位,他可以极大的节约存储空间,使用512M可以存储最多42.9亿的字节信息

setbit k1 2 1
getbit k1 2# 8位一组
strlen k1 
# 统计
127.0.0.1:6379> setbit uid:login123 1 1
(integer) 0
127.0.0.1:6379> setbit uid:login123 2 1
(integer) 0
127.0.0.1:6379> setbit uid:login123 3 1
(integer) 0
127.0.0.1:6379> bitcount uid:login123 
(integer) 3
127.0.0.1:6379> bitcount uid:login123 0 30
(integer) 3# 统计连续两天签到的用户
127.0.0.1:6379> setbit 20230101 0 1
(integer) 0
127.0.0.1:6379> setbit 20230101 1 1
(integer) 0
127.0.0.1:6379> setbit 20230101 2 1
(integer) 0
127.0.0.1:6379> setbit 20230102 1 1
(integer) 0
127.0.0.1:6379> setbit 20230102 2 1
(integer) 0
127.0.0.1:6379> bitcount 20230101
(integer) 3
127.0.0.1:6379> bitcount 20230102
(integer) 2
127.0.0.1:6379> bitop and k3 20230101 20230102
(integer) 1
127.0.0.1:6379> bitcount k3
(integer) 2

应用场景:统计用户活跃度

HyperLogLog

用来做基数统计算法,具有去重复功能统计网站UV(每天的独立访客ip唯一),PV
用户搜索网站关键词的数量
统计用户每天搜索不同词条个数# 统计 文章浏览量
127.0.0.1:6379> pfadd article:111 192.168.0.1
(integer) 1
127.0.0.1:6379> pfadd article:111 192.168.0.2
(integer) 1
127.0.0.1:6379> pfadd article:111 192.168.0.1
(integer) 0
127.0.0.1:6379> pfcount article:111
(integer) 2# 合并 两个文章的浏览量,这个合并是做了去重复操作的
127.0.0.1:6379> pfmerge distresutl article:111 article:222
127.0.0.1:6379> pfcount distresutl 
(integer) 2

GEO

摇一摇附近的妹子
附近核酸点
附近商家
附近滴滴打车GEOADD city 116.403963 39.915119 "天安门" 116.403414 39.924091 "故宫" 116.024067 40.362639 "长城"
127.0.0.1:6379> type city
zset# 解决中文乱码问题
[root@ecs-56325218 ~]# redis-cli -a 111111 --raw
127.0.0.1:6379> zrange city 0 -1
天安门
故宫
长城# 返回经纬度
127.0.0.1:6379> geopos city 天安门 故宫
116.40396326780319214
39.91511970338637383
116.40341609716415405
39.92409008156928252
# hash编码
127.0.0.1:6379> geohash city 天安门 故宫
wx4g0f6f2v0
wx4g0gfqsj0
# 查询两地距离 m km 
127.0.0.1:6379> geodist city 天安门 故宫 m
998.8332
127.0.0.1:6379> geodist city 天安门 故宫 km
0.9988# 附近的人
georadius 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
GEORADIUS city 116.418017 39.914402 10 km withdist withcoord count 10 withhash desc
GEORADIUS city 116.418017 39.914402 10 km withdist withcoord withhash count 10 desc
GEORADIUSbymember city 天安门  10 km withdist withcoord withhash count 10 desc

持久化

RDB

指定时间间隔,执行数据集的时间点快照

默认自动触发(Redis7)不同之前(时间)

手动触发:调用save(阻塞,生产上禁用)命令或者bgsave(非阻塞)

关机的时候也会执行RDB

主从复制也会执行RDB

缺点:宕机可能存在数据丢失,不满足时间间隔

禁用RDB

配置文件 save ‘’

AOF

追加写操作

开启:配置文件 appendonly yes

自我优化,AOF重写(压缩文件)

回写策略:

1. Always:每步写回
1. every sec:每秒写会(默认)
1. no:写到缓冲区,具体由操作系统决定啥时写到磁盘

混合使用(生产)

AOF优先级高于RDB

1 开启混合方式设置

设置aof-use-rdb-preamble的值为 yes yes表示开启,设置为no表示禁用

2 RDB+AOF的混合方式---------> 结论:RDB镜像做全量持久化,AOF做增量持久化

先使用RDB进行快照存储,然后使用AOF持久化记录所有的写操作,当重写策略满足或手动触发重写的时候,将最新的数据存储为新的RDB记录。这样的话,重启服务的时候会从RDB和AOF两部分恢复数据,既保证了数据完整性,又提高了恢复数据的性能。简单来说:混合持久化方式产生的文件一部分是RDB格式,一部分是AOF格式。----》AOF包括了RDB头部+AOF混写

前提:必须开启AOF

纯缓存模式

同时关闭RDB+AOF

关闭RDB:save ‘’

关闭AOF:appendonly no

高级篇

Redis是单线程还是多线程

redis4之后才慢慢支持多线程,直到redis6/7后才稳定

Redis是单线程

主要是指Redis的网络IO和键值对读写是由一个线程来完成的,Redis在处理客户端的请求包括获取(socket读)、解析、执行、内容返回(socket写)等都一个顺序串行的主线程处理,这就是所谓的单线程。这也是Redis对外提供键值存储服务的主要流程

但Redis的其他功能,比如持久化RDB、AOF、异步删除、集群数据同步等等,其实是由额外的线程执行

Redis命令工作线程是单线程,但是,整个Redis来说,是多线程

多线程的优化命令

# 删除大key
unlink key
flushdb async
flushall async

Redis性能影响因素:CPU、内存、网络IO(主要)

redis7开启多线程(默认关闭):

可以加速网络处理,提高吞吐量

io-threads 4
io-threads-do-reads yes

BigKey

# MoreKey案例
# 生成100W条redis批量设置kv的语句(key=kn,value=vn)写入到/tmp目录下的redisTest.txt文件中
for((i=1;i<=100*10000;i++)); do echo "set k$i v$i" >> /tmp/redisTest.txt ;done;cat /tmp/redisTest.txt | /opt/redis-7.0.0/src/redis-cli -h 127.0.0.1 -p 6379 -a 111111 --pipe# 生产上限制keys * / flushdb /flushall 等危险命令的误删误用,在redis.conf的SECURITY的一项中
rename-command key ""
rename-command flushdb ""
rename-command flushall ""scan 替换 keys *
scan
sscan
hscan
zscanscan curosr [pattern] [count]# 大key查询
redis-cli --bigkeys -a 111111  或者 memory usage key
# 如何删除
string	unlink
hash		使用hscan 每次获取少量field-value,在使用hdel删除每个field
list		ltrim
set			使用sscan 每次获取少量field-value,在使用srem删除每个field
zset		使用zscan 每次获取少量field-value,在使用ZREMRANGEBYRANK删除每个field

缓存双写一致性之更新策略探讨

  1. 高并发下,双检加锁

请添加图片描述

不能保证100%

  1. 利用mq的最终一致性(个人感觉这种方案比较好)

    请添加图片描述

  2. 双写一致性canal监听

bitmap/hyperloglog/geo落地实现

hyperloglog

uv:独立访客,一般理解客户端ip(需要考虑去重)

pv:页面浏览量,不用去重

dau:日活跃用户量(登录或者是用来某个产品的用户数 去重复登录用户)

mau:月活越用户

geo

附近的人

bitmap

连续签到

最近一周的活跃用户

某个用户按照365,哪天登录过?那几天没有登录?

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

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

相关文章

postman 自动化测试

postman 自动化测试 0、写在前面1、变量引用1.1、如何在请求体中引用变量 0、写在前面 在有些时候看官方文档 比网上搜索效率要高&#xff0c; 比如网上搜一通还是不知道用法或者没有搜索到你想要的用法的时候。 postman官方文档 : https://learning.postman.com/docs/introdu…

layui选项卡演示

layui选项卡演示 .1 引入layui2. 选项卡演示实列3.js分离的代码4运行结果 在前端开发中&#xff0c;选项卡常用于展示多个内容模块&#xff0c;提供用户友好的界面交互方式。layui作为一款简洁易用的前端框架&#xff0c;提供了丰富的组件库&#xff0c;其中包括了强大且易用的…

《MySQL》事务

文章目录 概念事务的操作属性&#xff08;aicd&#xff09; 概念 一组DML语句&#xff0c;这组语句要一次性执行完毕&#xff0c;是一个整体 为什么要有事务&#xff1f; 为应用层提供便捷服务 事务的操作 有一stu表 # 查看事务提交方式(默认是开启的) show variables like au…

pytorch深度学习逻辑回归 logistic regression

# logistic regression 二分类 # 导入pytorch 和 torchvision import numpy as np import torch import torchvision from torch.autograd import Variable import torch.nn as nn import torch.nn.functional as F import torch.optim as optim import matplotlib.pyplot as …

Kafka第二课-代码实战、参数配置详解、设计原理详解

一、代码实战 一、普通java程序实战 引入依赖 <dependencies><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>2.4.1</version></dependency><dependency>&l…

Ceph的安装部署

文章目录 一、存储基础1.1 单机存储设备1.2 单机存储的问题1.3分布式存储&#xff08;软件定义的存储 SDS&#xff09; 二、Ceph 简介2.1 Ceph 优势2.2 Ceph 架构2.3 Ceph 核心组件2.4 Pool、PG 和 OSD 的关系&#xff1a;2.5 OSD 存储后端2.6 Ceph 数据的存储过程2.7 Ceph 版本…

面向初学者的卷积神经网络

卷积神经网络在机器学习中非常重要。如果你想做计算机视觉或图像识别任务&#xff0c;你根本离不开它们。但是很难理解它们是如何工作的。 在这篇文章中&#xff0c;我们将讨论卷积神经网络背后的机制、它的优点和应用领域。 什么是神经网络&#xff1f; 首先&#xff0c;让…

架构训练营:3-3设计备选方案与架构细化

3架构中期 什么是备选架构&#xff1f; 备选架构定义了系统可行的架构模式和技术选型 备选方案筛选过程 头脑风暴 &#xff1a;对可选技术进行排列组合&#xff0c;得到可能的方案 红线筛选&#xff1a;根据系统明确的约束和限定&#xff0c;一票否决某些方案&#xff08;主要…

Docker 安装 Nginx,并实现负载均衡

1、获取 nginx 的镜像 # 默认是latest版本docker pull nginx 2、运行 nginx 容器 docker run --name nginx-80 -p 80:80 --rm -d nginx# --name nginx-80 设定容器的名称# -p 80:80 端口进行映射&#xff0c;将本地的80端口映射到容器内部的80端口# --rm 表示容器退出后直接…

Vue中v-html用法以及指令汇总

操作数组的方法 &#xff1a; push&#xff1a;数组最后位置新增元素 pop&#xff1a; 删除最后一个元素 shift&#xff1a; 删除第一个元素 unshift&#xff1a;往前面加一个元素 splice&#xff1a;在数组的指定位置插入、删除、替换一个元素 sort&#xff1a; 数组排序…

卷积神经网络(CNN)原理详解

近些年人工智能发展迅速&#xff0c;在图像识别、语音识别、物体识别等各种场景上深度学习取得了巨大的成功&#xff0c;例如AlphaGo击败世界围棋冠军&#xff0c;iPhone X内置了人脸识别解锁功能等等&#xff0c;很多AI产品在世界上引起了很大的轰动。 而其中 卷积神经网络&am…

【微信小程序-uniapp】CustomButton 自定义常用吸底按钮组件

1. 效果图 2. 组件完整代码 <template><view:class="[custom-btn flex-center, size == big ? big : mid, type == primary ? primary : info, plain ? plain : , disabled ? disabled : , round ? round : ]"

神经网络之VGG

目录 1.VGG的简单介绍 1.2结构图 3.参考代码 VGGNet-16 架构&#xff1a;完整指南 |卡格尔 (kaggle.com) 1.VGG的简单介绍 经典卷积神经网络的基本组成部分是下面的这个序列&#xff1a; 带填充以保持分辨率的卷积层&#xff1b; 非线性激活函数&#xff0c;如ReLU&a…

挖矿记录+解决方案:利用GitLab组件对服务器进行挖矿导致CPU占用200%

文章目录 什么是云服务器挖矿?事件记录事件分析产生影响解决方案后期预防什么是云服务器挖矿? 云服务器挖矿是指利用云服务器从事赚取比特币的活动。比特币是一种虚拟数字货币,挖矿是将一段时间内比特币系统中发生的交易进行确认,并记录在区块链上形成新区块的过程。 用于…

Mybatis:传参+提交事务(自动or手动)+sql多表关联查询(两种方法)

目录 一、参数两种类型&#xff1a; 二、传参的几种方法&#xff1a; 三、提交事务 四、sql多表关联查询(两种方法) 一、参数两种类型&#xff1a; 1.#{参数}&#xff1a;预编译方式&#xff0c;更安全&#xff0c;只用于向sql中传值&#xff1b; select * from admin w…

只需一个提示词解除GPT-4的字符限制!

ChatGPT的内存有限,GPT-3.5-turbo的限制为4897个令牌,而GPT-4的最大限制为8192。如果您在使用GPT-4进行聊天时超过8192个令牌(约6827个单词),它就会开始遗忘。我想出了一种新的技巧,可以轻松将对话扩展10倍。 这种技巧不会将对话中的每个字都保存到内存中。当您去开会时,会有人…

如何解除“无法完成操作 因为文件包含病毒或潜在垃圾软件”

当运行软件遇到“无法完成操作 因为文件包含病毒或潜在垃圾软件”时&#xff0c;如何解决&#xff1f;如果确认此软件不是病毒软件&#xff0c;那么可以按照如下方法进行解决&#xff1a; 1&#xff1a;关闭防火墙 控制面板-系统和安全-Windows Defender防火墙-自定义设置&am…

分布式运用存储系统Ceph

一、ceph的相关知识 1.ceph介绍与简介 Ceph是一个开源的分布式存储解决方案&#xff0c;旨在提供可扩展性、高性能和强大的数据可靠性。它采用了一种分布式对象存储架构&#xff0c;能够同时提供块存储和文件存储的功能。 Ceph使用C语言开发&#xff0c;是一个开放、自我修复和…

MySQL数据表高级操作

一、克隆/复制数据表二、清空表&#xff0c;删除表内的所有数据删除小结 三、创建临时表四、MySQL中6种常见的约束1、外键的定义2、创建外键约束作用3、创建主表test44、创建从表test55、为主表test4添加一个主键约束。主键名建议以"PK_”开头。6、为从表test5表添加外键&…

数据结构与算法——顺序表(顺序存储结构)及初始化详解

顺序表&#xff0c;全名顺序存储结构&#xff0c;是线性表的一种。通过《什么是线性表》一节的学习我们知道&#xff0c;线性表用于存储逻辑关系为“一对一”的数据&#xff0c;顺序表自然也不例外。 不仅如此&#xff0c;顺序表对数据的物理存储结构也有要求。顺序表存储数据…