微信小程序大型系统架构中应用Redis缓存要点

在大型分布式系统架构中,必须选择适合的缓存技术以应对高并发,实现系统相应的高性能,酷客多小程序经过慎重选型,选择了采用基于腾讯云服务的Redis弹性缓存技术,结合Redis官方推荐的.NET驱动类库Service.Stack.Redis,实现Redis弹性缓存在系统中的应用。

现针对Redis在实际应用中需注意的要点,就如下几个方面进行总结:

在企业级应用过程,任何技术的引入都需要考虑可能产生的各种影响,对于缓存应用来说,首先需要考虑的是内存的占用状况。对于应用系统来说,内存是极其宝贵的资源,对于每一个存储到Redis缓存中的内容,都必须严格控制其内容的有效性和存储期限,具体需要注意的事项如下:

a)使用合适的命名方法,可以简化存储项的管理。建议使用带有业务意义的名称,可以采用类似DotNet命名空间的类似命名管理方式(可使用冒号来划分键名,例如Product:Category 键名来存储商品分类数据),这样有助于缓存数据的数据管理及后期数据的迁移,删除等

b)进行数据删除时,需注意同时删除掉相关联无效的级联数据

a) 采用合适命名方式的同时,要控制键的名称长度,缓存数据量达到一定程度时,键(Key)所占用的存储空间也会是内存的一笔较大的开销,因此需要严格控制键的长度。

a) 可以使用list的情况下尽量用list代替set。如果你不需要使用set特性,List在使用更少内存的情况下可以提供比set更快的速度。

b) Sorted sets是及其昂贵的数据结构,不管是对内存的消耗还是基本操作时的开销。如果只是需要一个存储查询记录的场景,不在意排序这样的属性,那么建议使用哈希表结构来存储。

对于在系统中实际对于Redis的使用,结合酷客多实际使用业务,可以考虑在如下几个场景中

a) 例如可以将 最新100条评论Id 放在Redis的List中

c) 插入完成后再用LTRIM latest.comments 0 100命令使其永远只保存最近100条

a) 取Top N操作 按照某个条件为权重,使用sorted set,将要排序的值设置成sorted set的score,将具体的数据设置成相应的value,每次只需要执行一条ZADD命令即可。

d) 使用list可以构建队列,使用SortSet可构建有优先级要求的队列

e) 最基本的应用,其总体性能优于Memcached,数据结构更加丰富实用

a) Sorted set的score设计成过期时间戳,通过过期时间排序定期清理数据,或根据此依据定期清理数据库中过期数据(官网推荐的使用场景之一,感觉应用方式不太好,不推荐)

f) Redis的Pub/Sub系统可以构建实时的消息系统,比如很多用Pub/Sub构建的实时聊天系统的例子(网上推荐,暂未用到)

Rdis自身的过期策略为两种结合使用:

a) 进行 get 或setnx 时,先检查key是否过期,若过期,则删除key,并执行相关操作

b) 若没过期,直接执行相关操作

定期循环 随机查是否过期,查到后,删除

当进行命令操作Redis缓存的数据时,需注意操作命令对Redis中数据的的过期时间的影响,简单概括如下:

关于过期时间:

Redis2.4中expire精度不高,通常在0到1秒间,Redis2.6以后expire精度可以控制在0到1毫秒内

作者:酷客多小程序 徐冰

Original: https://www.cnblogs.com/ywqu/p/8551582.html
Author: 灵动生活
Title: 微信小程序大型系统架构中应用Redis缓存要点

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/529182/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 实验3: OpenFlow协议分析实战

    实验三: OpenFlow协议分析实战 (一) 基本要求 1.搭建拓扑、IP配置、主机通信 1.1 搭建拓扑 1.2 IP配置 1.3 代码 #!/usr/bin/env pyth…

    Linux 2023年6月7日
    087
  • 系统初始化

    一般系统安装好后,按照自己习惯定义 csharp;gutter:true;</p> <h1>alias</h1> <p>echo &…

    Linux 2023年6月7日
    050
  • 个人学习-STL深入学习01-vectory源码研习 // 需要补充

    STL,即标准模板库(Standard Template Library,STL),内部封装了常见的容器和算法。由六部分组成:1.容器(Containers)2.分配器(Alloc…

    Linux 2023年6月6日
    080
  • Xshell的快捷键【转】

    删除ctrl + d 删除光标所在位置上的字符相当于VIM里x或者dlctrl + h 删除光标所在位置前的字符相当于VIM里hx或者dhctrl + k 删除光标后面所有字符相当…

    Linux 2023年5月28日
    085
  • Linux 将本地文件上传Linux服务器, 即ssh 命令上传本地文件

    在linux下一般用scp这个命令来通过ssh传输文件。 1、从服务器上下载文件 scp username@servername:/path/filename /var/www/l…

    Linux 2023年6月13日
    0108
  • 阿里云-docker上安装redis

    1、取最新版的 Redis 镜像 这里我们拉取官方的最新版本的镜像: $ docker pull redis:latest 2、查看本地镜像 使用以下命令来查看是否已安装了 red…

    Linux 2023年5月28日
    077
  • [20220104]in list 几种写法性能测试.txt

    [20220104]in list 几种写法性能测试.txt –//以前写过几种in list的写法,从来没有测试过这几种方法的性能测试看看. 1.环境:SCOTT@b…

    Linux 2023年6月13日
    055
  • DQL

    查询语法 select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组后条件 order by 排序字段 limit 分页限定 …

    Linux 2023年6月7日
    070
  • 银河麒麟KYLIN安装wireshark进行抓包

    银河麒麟KYLIN安装wireshark进行抓包(前提是网络连通):sudo apt-get updatesudo apt-get install wireshark -y弹出框选…

    Linux 2023年6月13日
    0111
  • 2021年1月-第02阶段-前端基础-HTML+CSS阶段-Day01

    HTML5 第一天 一、什么是 HTML5 HTML5 的概念与定义 定义:HTML5 定义了 HTML 标准的最新版本,是对 HTML 的第五次重大修改,号称下一代的 HTML …

    Linux 2023年6月8日
    086
  • Python 获取字典中的第一个键

    提供两种方法: 使用 list 将字典的 key 转换成列表,然后取第一个元素 [0]。如果想要最后一个 key 的话,就取最后一个元素 [-1]。 >>> my…

    Linux 2023年6月7日
    071
  • 国产化之银河麒麟安装.NetCore-包管理器方式

    背景 某个项目需要实现基础软件全部国产化,其中操作系统指定银河麒麟,数据库使用达梦V8,CPU平台的范围包括x64、龙芯、飞腾、鲲鹏等。 考虑到这些基础产品对.NETCore的支持…

    Linux 2023年5月27日
    0113
  • 剑指offer计划20( 搜索与回溯算法中等)—java

    1.1、题目1 剑指 Offer 07. 重建二叉树 1.2、解法 注释解法。 1.3、代码 class Solution { int[] preorder; HashMap ma…

    Linux 2023年6月11日
    096
  • CVE-2020-3580漏洞复现

    一、前言 前段时间碰到了该漏洞,记录一下! 二、漏洞介绍 该漏洞为思科ASA设备和FTD设备的未授权反射型XSS漏洞,影响版本如下: Cisco ASA Software 9.6 …

    Linux 2023年6月8日
    098
  • 第二周作业

    第二周作业 一、显示在/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或者目录 [root@CentOS8 / ]#!mkdir mkdir /etc/…

    Linux 2023年6月13日
    089
  • shell脚本echo打印错位

    问题描述 在脚本中使用curl命令请求Jenkins的API获取job的编号,随后将编号和其他字符串拼接后,使用echo命令打印出来,但打印后字符串错位了。 脚本大致如下: num…

    Linux 2023年6月8日
    0109
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球