redis最佳实践

原则:redis希望存储的是热点数据,尽量可以在一天内访问到。

最佳实践

选择合适的数据结构

redis有String、Hash、Set、SortedSet、List等结构,主要依据业务需要进行选择
string:几乎所有数据都可以用string存储,但是最好适用于value较小、结构简单的数据,但是对于特殊结构如list/set这种,某种情况下可以节省存储空间和提高存取效率。(特点,可以有默认的过期时间)
list:有序列表,可以在头尾进行插入,插入效率高O(1),如果往中间插效率就很低。使用场景如博客系统可以为每篇文章设置一个list,使用lrange进行分页。
set:无序集合,可实现去重,使用场景如记录访问ip,可以实现天然去重。
SortedSet(ZSet):跳表,增删数据的复杂度都是O(logn),每个成员都有对应的分数用于排序,访问内部成员会很高效,使用场景如大型游戏积分榜,可以用zincrby增加用户分数,用zrange来获取top10,用zrange和zrank来获取用户的排名信息和附近的排名用户。
Hash:同hashmap,需要注意的是其编码有几种类型,压缩编码占据空间小但获取效率低容易导致pending,所以可以在设置时指定编码,对于对象,如果只更新部分字段就显得更加灵活而不需要像字符串一样维护整个json。
HyperLogLog:用于基数统计,如网站UV.在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。可以参考这篇文章:
https://www.cnblogs.com/exceptioneye/p/7081896.html

杜绝大Value及热点key

String类型超过1Mb,集合的元素超过1w,就需要考虑拆分。
热点key容易导致cpu及网络高负载,需要业务上有相应的降级。

由于redis为单线程,针对大key的耗时一高就容易导致整个集群出现问题,
1.拆分大value的方法:
i:需要整存整取
将对象拆成几个key value,使用multiGet获取值来分拆单次操作的压力,将压力分摊到多个redis实例中,这种比较常见。
ii:需要部分存取
还是对其拆分为几个key value,或者使用hash进行存储分拆,每个filed去代表属性。

2.集合中元素过多(超过1w)
同样是需要进行拆分来分散单次操作的压力,比如固定桶数量,设置n个hash桶,先进行取余确定分到哪个hash桶,再去真正的hash桶内执行hash操作(相当于为key拆分编号)
对于list的pop操作如果需要按照时间,就可以在设置key的时候按照时间进行命名分拆。

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

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

相关文章

JS基础之函数

js基础之函数 目录 js基础之函数什么是函数?函数的语法无参函数有参函数:函数表达式函数的返回值returnarguments 什么是函数? 函数的作用就是将一段代码块封装打包到一起,方便后期重复使用 函数的语法 function 函数名(参数1,…

使用elasticsearch 8.4.3 的管道解析日志(kibana操作)

使用elasticsearch的管道解析日志(kibana操作) 一. 什么是 pipeline二. 案例 前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 以下是一个简单的文档解析案例…

Project_Euler-15 题解

Project_Euler-15 题解 题目 思路 一眼背包问题,再看一眼广度优先搜索,再看一眼排列组合,这里讲一讲排列组合的解法吧: 以 2 ∗ 2 2*2 2∗2的组合为例可以发现: 无论哪一种方法,从左上角到右下角总共需要…

【LeetCode】递归精选8题——基础递归、链表递归

目录 基础递归问题: 1. 斐波那契数(简单) 1.1 递归求解 1.2 迭代求解 2. 爬楼梯(简单) 2.1 递归求解 2.2 迭代求解 3. 汉诺塔问题(简单) 3.1 递归求解 4. Pow(x, n)(中等&…

论文精读--Noisy Student

一个 EfficientNet 模型首先作为教师模型在标记图像上进行训练,为 300M 未标记图像生成伪标签。然后将相同或更大的 EfficientNet 作为学生模型并结合标记图像和伪标签图像进行训练。学生网络训练完成后变为教师再次训练下一个学生网络,并迭代重复此过程…

强化学习入门(Matlab2021b)-定义奖励和观察【1】

目录 1 前言2 Continuous Rewards 连续奖励3 Discrete Rewards 离散奖励4 Mixed Rewards 混合奖励5 Observation Signals 观测信号参考链接1 前言 为了指导学习过程,强化学习使用从环境生成的标量奖励信号。该信号衡量agent相对于任务目标的性能。换句话说,对于给定的观察(…

来看看投资界最关心的 Sora 几大问题

作者:苍何,前大厂高级 Java 工程师,阿里云专家博主,CSDN 2023 年 实力新星,土木转码,现任部门技术 leader,专注于互联网技术分享,职场经验分享。 🔥热门文章推荐&#xf…

如何查看 CPU 占用高的进程

1、使用 top 命令,查看 cpu 占用超过 100% 2、查看哪个进程占用 cpu 最高(该案例使用阿里的 arthas 来查看) 2.1 下载:curl -O https://arthas.aliyun.com/arthas-boot.jar 2.2 启动命令:java -jar arthas-boot.jar …

OpenAI 发布文生视频模型 Sora,普通人应该怎么做才能利益最大化?

原文链接: OpenAI 发布文生视频模型 Sora,普通人应该怎么做才能利益最大化? 自从 2022 年 11 月 30 日 ChatGPT 发布之后,每次 OpenAI 再发布新功能都跟过年一样,那叫一个热闹。 包括 GPT 4.0,GPT Store&…

深入浅出JVM(一)之Hotspot虚拟机中的对象

本篇文章思维导图 对象的创建 对象的创建可以分为五个步骤:检查类加载,分配内存,初始化零值,设置对象头,执行实例构造器 类加载检查 HotSpot虚拟机遇到一条new指令,会先检查能否在常量池中定位到这个类的符号引用,检查这个类是否类加载过 没有类加载过就去类加载类加载过就进…

LeetCode15.三数之和

题目 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 …

LeetCode646. Maximum Length of Pair Chain——动态规划

文章目录 一、题目二、题解 一、题目 You are given an array of n pairs pairs where pairs[i] [lefti, righti] and lefti < righti. A pair p2 [c, d] follows a pair p1 [a, b] if b < c. A chain of pairs can be formed in this fashion. Return the length …

粉丝2000 啦,选对赛道,做正确的事情,粉丝涨到2000说明大家对我做的事情还是非常的认可的,继续坚持中,将相关资料做了视频整理

1&#xff0c;见证历史成长&#xff0c;粉丝涨到 2000 啦 2&#xff0c;把视频进行分类&#xff0c;研究xinference相关视频 【xinference】&#xff08;1&#xff09;&#xff1a;在autodl上&#xff0c;使用xinference部署chatglm3大模型&#xff0c;支持函数调用&#xff0…

网站常见的攻击类型有什么,如何针对性防护

在互联网时代&#xff0c;几乎每个网站都存在着潜在的安全威胁。这些威胁可能来自人为失误&#xff0c;也可能源自网络犯罪团伙所发起的复杂攻击。无论攻击的本质如何&#xff0c;网络攻击者的主要动机通常是谋求经济利益。这意味着不管是什么网站类型潜在的威胁一直都存在。 在…

简单的服务器取证

一次简单的服务器取证入门 检材&#xff1a;https://pan.baidu.com/s/1T_OBlqe–7C-sfYhYyMZjQ?pwd8e19 目录 1、系统的内核版本2、系统的历史命令第32条3、SSH服务的开放端口4、宝塔面板的用户名5、宝塔面板的端口号6、面板上的网站域名7、面板是否开启了SSL服务8、面板别名是…

AD24-PCB间距规则、布线线宽规则、规则使能优先级设置

一、PCB间距规则 1、设计-规则 2、忽略焊盘间距要打勾&#xff0c;不然会出现右边的错误 3、可进行不同间距要求添加 二、布线规则 1、电源线宽&#xff0c;根据载流&#xff0c;进行加宽 非阻抗走线&#xff0c;根据生成要求 大于6mil&#xff0c;成本最低&#xff1b;…

【git 使用】使用 git rebase -i 修改任意的提交信息/合并多个提交

修改最近一次的提交信息的方法有很多&#xff0c;可以参考这篇文章&#xff0c;但是对于之前的提交信息进行修改只能使用 rebase。 修改提交信息 假设我们想修改下面这个提交信息&#xff0c;想把【登录】改成【退出登录】步骤如下 运行 git rebase -i head~3 打开了一个文本…

C++之C++输入输出流

目录 1、输入输出的含义 2、C输入输出机制 2.1、"流"的概念 2.2、C常用流类型 2.3、流类型之间的关系 2.4、流的状态 2.5、管理流的状态 2.6、流的通用操作 2.7、缓冲区 2.7.1、为什么要引入缓冲区呢&#xff1f; 2.7.2、缓冲区要做哪些工作&#xff1f; …

Stable Diffusion 模型下载:A-Zovya RPG Artist Tools(RPG 大师工具箱)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 A-Zovya RPG Artist Tools 模型是一个针对 RPG 训练的一个模型&#xff0c;可以生成一些 R…

Android批量加载图片OOM问题

Android批量加载图片OOM问题 前言使用内存缓存使用磁盘缓存处理配置更改 前言 将单个位图加载到界面中非常简单&#xff0c;但如果您需要同时加载较大的一组图片&#xff0c;则操作起来会比较复杂。实际上&#xff0c;在许多情况下&#xff08;比如使用 ListView、GridView 或…