Day28:Azure小白如何使用Azure Cache for Redis来存取常用资料

在昨天我们谈完如何使用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的

记忆体内部资料结构存放区。

Transactions in Azure Cache for Redis

有些时候您必须保证可同时执行多个作业。 例如,在Onf 的即时讯息应用程序中

,使用者可以传送:个别图片、个别文字简讯,或图片和文字简讯。 当使用者选择

一起传送图片和文字简讯时,您必须确定群组的其他成员能够同时接收它们,因为

如果图片和文字简讯未一起接收,就有可能会在图片和文字简讯之间传送个别讯息

。 这样会让整体对话令人感到困惑。

Creating and running transactions

Redis 中的交易运作方式,是将多个要执行的命令以群组方式排入伫列。 当执行

交易时,在交易中排入伫列的命令保证会执行,而不会有来自其他用户端的任何

其他命令交错在其当中,若要开始交易区块,请输入 MULTI 命令。 後续的命令会

被排入伫列,而不会立刻执行。 执行 EXEC 命令会将所有已排入伫列的命令当作

交易单位来执行。 如果你决定要在命令正在排入伫列时中止开启的交易,执行

DISCARD 命令将会关闭交易区块,而不会执行「任何」已排入伫列的命令。

Redis 交易不支援复原的概念。 如果您使用不正确的语法将命令排入伫列至交易

区块中,区块将会维持开启,但如果您尝试以 EXEC 执行,将会自动舍弃该交易

区块。 在交易「执行期间」(呼叫 EXEC 之後) 失的命令不会导致交易中止

或复原 — Redis 仍会执行所有命令,并将交易视为已成功完成。

https://ithelp.ithome.com.tw/upload/images/20201013/20112182vHTPMADQnS.jpg

Data expiration

资料不一定都要永久保存,有时候你会想要在特定时间删除资料,例如在你的即时

讯息应用程序中,使用者可以设定群组聊天的显示名称。不过你想要在一小时後

重设名称,你可以撰写自己的服务器端逻辑 (设定一小时计时器并重设名称)来完成

此动作。 不过Azure Cache for Redis 支援资料到期,此功能会自动完成此

动作,不需要撰写额外的逻辑。

资料到期这个功能,可以在在设定的一段时间之後,自动删除快取中的索引键和值。

Why use data expiration?

资料到期常用於储存资料存留期较短的情况中,因为Azure Cache for Redis是

记忆体内部资料库,而且可用的记忆体不像您储存在磁碟上时一样多,因为您在

使用Azure Cache for Redis时的储存空间有限,你应该只储存重要资料。

如果资料不需要存在太长时间,请务必设定到期时间。

有不同的命令可以实作及管理 Azure Cache for Redis 中的资料到期:

-EXPIRE:设定机码的逾时 (以秒为单位)

-PEXPIRE:设定索引键的逾时 (以毫秒为单位)

-EXPIREAT:使用绝对 Unix 时间戳记 (以秒为单位) 设定索引键的逾时

-PEXPIREAT:使用绝对 Unix 时间戳记 (以毫秒为单位) 设定索引键的

逾时

-TTL:传回索引键存留的剩余时间 (以秒为单位)

-PTTL**:传回索引键存留的剩余时间 (以毫秒为单位)

-PERSIST:让机码永不到期

Eviction policies

记忆体是Azure Cache for Redis最重要的资源,因为它是记忆体内部资料库。

当你开始新增超过可用记忆体数量的资料时会遇到问题。,Azure Cache for

Redis支援eviction policies(收回原则),policie会指出当用尽记忆体时,

应该如何处理资料。

https://ithelp.ithome.com.tw/upload/images/20201013/20112182uINTwb42kw.jpg

What is an eviction policy?

eviction policy是一个计划,决定当你超过可用记忆体数量上限时,如何管理

你的资料,例如,使用收回原则,你就可以告诉 Azure Cache for Redis删除

随机索引键,以让出空间给新的资料插入。

Types of eviction policies

Azure Cache for Redis 提供的收回原则有六种。 这些原则都会在你於记忆体

用尽的情况下尝试插入资料时,执行动作。

-noeviction: 无收回原则。 如果您尝试插入资料,则会传回错误讯息。

-allkeys-lru: 移除最近最少使用的索引键。

-allkeys-random: 移除随机索引键。

-volatile-lru: 在已设定到期的所有索引键中,移除最近最少使用的

索引键。

-volatile-ttl: 根据设定的到期时间,移除具有最短存留时间的索引键

-volatile-random: 移除已设定到期的随机索引键。

Cache-aside pattern

建置应用程序时,你想要提供绝佳的使用者体验,而其中一部分就是快速撷取资料

。 从资料库撷取资料通常是缓慢的程序,而且如果经常读取此资料,则可能会

造成不好的使用者体验。 另行快取模式描述如何搭配资料库实作快取,以尽快

传回最常存取的资料。

https://ithelp.ithome.com.tw/upload/images/20201013/20112182fqeCL07iRU.png

What is the cache-aside pattern?

cache-aside pattern模式指定当你需要从资料来源(例如关联式资料库)撷取

资料时,你应该先检查快取中的资料,如果资料在你的快取中,则使用它。

如果资料不在你的快取中,则查询资料库,并在将资料传回给使用者时,将它新增

至快取。 接着,你就可以在下次需要资料时,从快取存取该资料。

When to implement the cache-aside pattern?

从资料库读取资料通常是缓慢的程序。 这涉及到编译复杂的查询、准备查询执行

计画、执行查询,然後准备结果。 在某些情况下,此程序也可能会从磁碟读取

资料。 你可以在资料库层级进行最佳化,例如预先编译查询,以及将部分资料

载入记忆体。 不过,从资料库撷取资料时,一律会执行查询及准备结果。

使用另行快取模式可解决这个问题。 在另行快取模式中,仍有应用程序和资料库

,但现在也有快取,快取会将其资料储存在记忆体中,因此不需要与档案系统互动

,快取也会以非常简单的资料结构(例如索引键值组)来储存资料,因此不需要执行

复杂的查询来收集资料,或在写入资料时维护索引。 基於上述原因,快取的效能

一般会高於资料库。 当您使用应用程序时,它会尝试先从快取读取资料。 如果

要求的资料不在快取中,则应用程序会如往常般从资料库撷取它。 不过,它会

接着将资料储存在快取中,以供後续要求使用。 下次当任何使用者要求该资料

时,则会直接从快取传回它。

https://ithelp.ithome.com.tw/upload/images/20201013/20112182hZH1XPJPZ6.png

How to manage updating data

当你实作cache-aside模式时,会引进一个小问题。 由於你的资料现在储存於

快取和资料存放区中,因此当你尝试进行更新时,可能会遇到问题。 例如,若要

更新你的资料,你必须同时更新快取和资料存放区。

若要解决此问题,使用cache-aside模式让快取中的资料失效。 当您更新应用

程序中的资料时,你应该先删除快取中的资料,再直接对资料来源进行变更。

如此一来,下次要求资料时,快取中就不会有资料,而会重复此程序。

https://ithelp.ithome.com.tw/upload/images/20201013/201121821JqluyOBbU.png

Considerations for using the cache-aside pattern

Lifetime:若要让另行快取有效,请确定到期原则符合资料的存取频率。

设定太短的到期时间,可能会造成应用程序持续从资料存放区撷取资料,并将它

新增至快取。

Evicting:快取相较於一般资料存放区有大小限制,因此必要时会收回资料

。 请务必为你的资料选择适当的收回原则。

Priming:为了让另行快取模式生效,许多解决方案会在快取中预先填入需要

经常存取的资料。

Consistency:实作另行快取模式并不保证资料存放区与快取之间的一致性

。 资料存放区中的资料可能会在未通知快取的情况下变更。 这可能会导致严重

的同步处理问题。

当你必须从使用磁碟的资料来源经常存取资料时,另行快取模式会很有用。 使用

另行快取模式,您会将重要的资料储存在快取中,以协助加快撷取资料的速度。

手把手在Azure Cache for Redis建立transaction步骤

https://docs.microsoft.com/zh-tw/learn/modules/work-with-mutable-and-partial-data-in-a-redis-cache/3-create-a-transaction

手把手练习 - 实作资料到期步骤

https://docs.microsoft.com/zh-tw/learn/modules/work-with-mutable-and-partial-data-in-a-redis-cache/5-implement-data-expiration

Day28教学讲义:

https://docs.microsoft.com/zh-tw/learn/modules/work-with-mutable-and-partial-data-in-a-redis-cache/


<<:  更详细的 Docker 操作方法

>>:  Day 28 - 到客户端执行弱点扫瞄并修复的心得分享 第十五天

[Day00] 这次可以跟上 Kaggle 30 Days 挑战了吧

前言 写在前面 Kaggle 不知道从何时开始,每年会有一段时间举办 30 days challen...

【Day03-表格】为什麽熊猫(pandas)是用来处理表格的工具?

前两天我们稍微说明了一下对於看待资料的一些基本观念 那今天就来开始实际对资料做一些操作吧 环境需求:...

[Day 20]从零开始学习 JS 的连续-30 Days---todolist 待办事项

待办事项结构 to do list 需要输入框与输入按钮。 送出输入按钮後产生待办事项与完成按钮。 ...

Day 30 - 3D绘图篇 - 噪声地形演算II - 成为Canvas Ninja ~ 理解2D渲染的精髓

这是我最後的波纹了。 其实我一直想试着讲一次这句话(X) 首先来丢一张案例完成後的图片~ 大家应该...

Day 13-假物件 (Fake) - 模拟物件 (Mock)-2 (核心技术-5)

假物件兄弟战:虚设常式 V.S 模拟物件 相信许多人刚接触完虚设常式与模拟物件,会说不出两者之间确切...