在昨天我们谈完如何使用Azure Kubernetes Service部署Container应用程序後
今天我们来聊聊Azure Cache for Redis,若你有在布署Instant Messaging
服务,建议可以使用Azure Cache for Redis可以快速传送和存取,确保讯息的
图片和文字会一起传送,使用caching read-only data with Redis来最佳化
Web应用程序,Redis Cache是可作为database,cache或message broker的
记忆体内部资料结构存放区。
有些时候您必须保证可同时执行多个作业。 例如,在Onf 的即时讯息应用程序中
,使用者可以传送:个别图片、个别文字简讯,或图片和文字简讯。 当使用者选择
一起传送图片和文字简讯时,您必须确定群组的其他成员能够同时接收它们,因为
如果图片和文字简讯未一起接收,就有可能会在图片和文字简讯之间传送个别讯息
。 这样会让整体对话令人感到困惑。
Redis 中的交易运作方式,是将多个要执行的命令以群组方式排入伫列。 当执行
交易时,在交易中排入伫列的命令保证会执行,而不会有来自其他用户端的任何
其他命令交错在其当中,若要开始交易区块,请输入 MULTI 命令。 後续的命令会
被排入伫列,而不会立刻执行。 执行 EXEC 命令会将所有已排入伫列的命令当作
交易单位来执行。 如果你决定要在命令正在排入伫列时中止开启的交易,执行
DISCARD 命令将会关闭交易区块,而不会执行「任何」已排入伫列的命令。
Redis 交易不支援复原的概念。 如果您使用不正确的语法将命令排入伫列至交易
区块中,区块将会维持开启,但如果您尝试以 EXEC 执行,将会自动舍弃该交易
区块。 在交易「执行期间」(呼叫 EXEC 之後) 失的命令不会导致交易中止
或复原 — Redis 仍会执行所有命令,并将交易视为已成功完成。
资料不一定都要永久保存,有时候你会想要在特定时间删除资料,例如在你的即时
讯息应用程序中,使用者可以设定群组聊天的显示名称。不过你想要在一小时後
重设名称,你可以撰写自己的服务器端逻辑 (设定一小时计时器并重设名称)来完成
此动作。 不过Azure Cache for Redis 支援资料到期,此功能会自动完成此
动作,不需要撰写额外的逻辑。
资料到期这个功能,可以在在设定的一段时间之後,自动删除快取中的索引键和值。
资料到期常用於储存资料存留期较短的情况中,因为Azure Cache for Redis是
记忆体内部资料库,而且可用的记忆体不像您储存在磁碟上时一样多,因为您在
使用Azure Cache for Redis时的储存空间有限,你应该只储存重要资料。
如果资料不需要存在太长时间,请务必设定到期时间。
有不同的命令可以实作及管理 Azure Cache for Redis 中的资料到期:
-EXPIRE:设定机码的逾时 (以秒为单位)
-PEXPIRE:设定索引键的逾时 (以毫秒为单位)
-EXPIREAT:使用绝对 Unix 时间戳记 (以秒为单位) 设定索引键的逾时
-PEXPIREAT:使用绝对 Unix 时间戳记 (以毫秒为单位) 设定索引键的
逾时
-TTL:传回索引键存留的剩余时间 (以秒为单位)
-PTTL**:传回索引键存留的剩余时间 (以毫秒为单位)
-PERSIST:让机码永不到期
记忆体是Azure Cache for Redis最重要的资源,因为它是记忆体内部资料库。
当你开始新增超过可用记忆体数量的资料时会遇到问题。,Azure Cache for
Redis支援eviction policies(收回原则),policie会指出当用尽记忆体时,
应该如何处理资料。
eviction policy是一个计划,决定当你超过可用记忆体数量上限时,如何管理
你的资料,例如,使用收回原则,你就可以告诉 Azure Cache for Redis删除
随机索引键,以让出空间给新的资料插入。
Azure Cache for Redis 提供的收回原则有六种。 这些原则都会在你於记忆体
用尽的情况下尝试插入资料时,执行动作。
-noeviction: 无收回原则。 如果您尝试插入资料,则会传回错误讯息。
-allkeys-lru: 移除最近最少使用的索引键。
-allkeys-random: 移除随机索引键。
-volatile-lru: 在已设定到期的所有索引键中,移除最近最少使用的
索引键。
-volatile-ttl: 根据设定的到期时间,移除具有最短存留时间的索引键
-volatile-random: 移除已设定到期的随机索引键。
建置应用程序时,你想要提供绝佳的使用者体验,而其中一部分就是快速撷取资料
。 从资料库撷取资料通常是缓慢的程序,而且如果经常读取此资料,则可能会
造成不好的使用者体验。 另行快取模式描述如何搭配资料库实作快取,以尽快
传回最常存取的资料。
cache-aside pattern模式指定当你需要从资料来源(例如关联式资料库)撷取
资料时,你应该先检查快取中的资料,如果资料在你的快取中,则使用它。
如果资料不在你的快取中,则查询资料库,并在将资料传回给使用者时,将它新增
至快取。 接着,你就可以在下次需要资料时,从快取存取该资料。
从资料库读取资料通常是缓慢的程序。 这涉及到编译复杂的查询、准备查询执行
计画、执行查询,然後准备结果。 在某些情况下,此程序也可能会从磁碟读取
资料。 你可以在资料库层级进行最佳化,例如预先编译查询,以及将部分资料
载入记忆体。 不过,从资料库撷取资料时,一律会执行查询及准备结果。
使用另行快取模式可解决这个问题。 在另行快取模式中,仍有应用程序和资料库
,但现在也有快取,快取会将其资料储存在记忆体中,因此不需要与档案系统互动
,快取也会以非常简单的资料结构(例如索引键值组)来储存资料,因此不需要执行
复杂的查询来收集资料,或在写入资料时维护索引。 基於上述原因,快取的效能
一般会高於资料库。 当您使用应用程序时,它会尝试先从快取读取资料。 如果
要求的资料不在快取中,则应用程序会如往常般从资料库撷取它。 不过,它会
接着将资料储存在快取中,以供後续要求使用。 下次当任何使用者要求该资料
时,则会直接从快取传回它。
当你实作cache-aside模式时,会引进一个小问题。 由於你的资料现在储存於
快取和资料存放区中,因此当你尝试进行更新时,可能会遇到问题。 例如,若要
更新你的资料,你必须同时更新快取和资料存放区。
若要解决此问题,使用cache-aside模式让快取中的资料失效。 当您更新应用
程序中的资料时,你应该先删除快取中的资料,再直接对资料来源进行变更。
如此一来,下次要求资料时,快取中就不会有资料,而会重复此程序。
Lifetime:若要让另行快取有效,请确定到期原则符合资料的存取频率。
设定太短的到期时间,可能会造成应用程序持续从资料存放区撷取资料,并将它
新增至快取。
Evicting:快取相较於一般资料存放区有大小限制,因此必要时会收回资料
。 请务必为你的资料选择适当的收回原则。
Priming:为了让另行快取模式生效,许多解决方案会在快取中预先填入需要
经常存取的资料。
Consistency:实作另行快取模式并不保证资料存放区与快取之间的一致性
。 资料存放区中的资料可能会在未通知快取的情况下变更。 这可能会导致严重
的同步处理问题。
当你必须从使用磁碟的资料来源经常存取资料时,另行快取模式会很有用。 使用
另行快取模式,您会将重要的资料储存在快取中,以协助加快撷取资料的速度。
手把手在Azure Cache for Redis建立transaction步骤
手把手练习 - 实作资料到期步骤
Day28教学讲义:
https://docs.microsoft.com/zh-tw/learn/modules/work-with-mutable-and-partial-data-in-a-redis-cache/
>>: Day 28 - 到客户端执行弱点扫瞄并修复的心得分享 第十五天
前言 写在前面 Kaggle 不知道从何时开始,每年会有一段时间举办 30 days challen...
前两天我们稍微说明了一下对於看待资料的一些基本观念 那今天就来开始实际对资料做一些操作吧 环境需求:...
待办事项结构 to do list 需要输入框与输入按钮。 送出输入按钮後产生待办事项与完成按钮。 ...
这是我最後的波纹了。 其实我一直想试着讲一次这句话(X) 首先来丢一张案例完成後的图片~ 大家应该...
假物件兄弟战:虚设常式 V.S 模拟物件 相信许多人刚接触完虚设常式与模拟物件,会说不出两者之间确切...