惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog RSS Feed
D
Darknet – Hacking Tools, Hacker News & Cyber Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
G
Google Developers Blog
MyScale Blog
MyScale Blog
Google DeepMind News
Google DeepMind News
J
Java Code Geeks
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
Check Point Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
P
Proofpoint News Feed
D
Docker
Jina AI
Jina AI
博客园 - 三生石上(FineUI控件)
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Help Net Security
Help Net Security
Google DeepMind News
Google DeepMind News
L
LINUX DO - 最新话题
T
Tailwind CSS Blog
N
Netflix TechBlog - Medium
Forbes - Security
Forbes - Security
MongoDB | Blog
MongoDB | Blog
Attack and Defense Labs
Attack and Defense Labs
Webroot Blog
Webroot Blog
A
About on SuperTechFans
Schneier on Security
Schneier on Security
Hacker News - Newest:
Hacker News - Newest: "LLM"
Microsoft Azure Blog
Microsoft Azure Blog
F
Fortinet All Blogs
IT之家
IT之家
The Last Watchdog
The Last Watchdog
腾讯CDC
Microsoft Security Blog
Microsoft Security Blog
Project Zero
Project Zero
B
Blog
Recorded Future
Recorded Future
博客园_首页
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
SegmentFault 最新的问题
Security Archives - TechRepublic
Security Archives - TechRepublic
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Hacker News: Front Page
T
Threatpost
H
Heimdal Security Blog
Cloudbric
Cloudbric
Google Online Security Blog
Google Online Security Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
云风的 BLOG
云风的 BLOG
V
Visual Studio Blog

博客园 - 灵动生活

重磅出击!!春季小程序活动大作战,看我怎么玩?? 如何在C#项目中使用NHibernate 面向对象之六大设计原则 微信小程序基于腾讯云对象存储的图片上传 外卖小程序对接飞鹅小票打印的实现 微信小程序如何实现自动退款功能? 从“跳一跳”来看微信小程序的未来 为你揭露2018微信公开课pro的12个重点 酷客多小程序受邀参加 中国县域连锁药店发展峰会 促进客户转化,提高客单价!酷客多小程序发布版本V1.0.9! 重磅消息:微信小程序支持长按二维码进入 「酷客多」关注:马化腾公开演讲,透露2017年春节前会推出“小程序” 微信小程序购物商城系统开发系列-目录结构 微信小程序购物商城系统开发系列-工具篇 上海闪酷成为京东商城第一批独立软件开发商(ISV) 创业邦杂志报道上海闪酷:传统企业进军电商,IT系统问题怎么解决?这家企业或许可以帮到你 Fatal error: Call to undefined function session_start() asp.net Jquery图片延迟加载 TFS2010合并与分支(Branch and Merge)
微信小程序大型系统架构中应用Redis缓存要点
灵动生活 · 2018-03-12 · via 博客园 - 灵动生活

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

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

一、    应用注意事项

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

  1. 1.      跟踪所有储存在Redis中的键

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

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

  1. 尽量控制键名的长度

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

  1. 选择合适的数据结构

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

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

二、    实际应用场景

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

  1. 1.      取最新X条数据

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

        b)       使用LPUSH latest.comments<ID>命令,向list集合中插入数据

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

  1. 2.      排行榜应用

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

  1. 3.      队列系统 使用

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

  1. 4.      数据缓存

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

  1. 5.      需要精准设定过期时间

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

  1. 6.      Pub/Sub构建实时消息系统

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

三、    Redis过期策略注意

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

  1. 惰性删除

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

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

  1. 定期删除

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

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

  1. 当key被DEL命令删除或者被SET、GETSET命令重置后与之关联的过期时间会被清除
  2. 从概念上更新了存储在key中的值而没有用全新的值替换key原有值的所有操作都不会影响在该key上设置的过期时间(例如使用INCR命令增加key的值或者通过LPUSH命令在list中增加一个新的元素或者使用HSET命令更新hash字段的值 都不会清空原来的过期时间设置)
  3. 可通过PERSIST命令清除已设置的过期时间重新将key变为持久的
  4. 若key被RENAME命令重命名则与之关联的过期时间将传递到新名称的key,若key被RENAME命令重写,比如本存在名为mykey_a和mykey_b的key一个RENAME mykey_b mykey_a命令将mykey_b重命名为本已存在的mykey_a那么无论mykey_a原来的设置如何都将继承mykey_b的所有特性,包括过期时间设置。

        关于过期时间:

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

作者:酷客多小程序 徐冰