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的

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

今天早上操作Azure Redis Cache的SandBox(免费但有限制3小时)卡关,

晚上20:45再冲一波总算弄好/images/emoticon/emoticon13.gif/images/emoticon/emoticon13.gif/images/emoticon/emoticon13.gif

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

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

手把手实作Azure Redis Cache Data Expir步骤

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/


<<:  Day 30 整体心得及未来规划

>>:  [Day29] AWS Wavelength (5G)

【Day19】传值和传址(传参考)

传值(Call by value) 在 JavaScript 中,只有原始型别为传值(Call by...

【Day24-序列】时间序列型资料的基本处理——以0050股票价格为例:寻找峰值、移动平均、曲线拟合

前面我们虽然有讲到除了基本的数值类型资料以外,一共主要会有文字、图片、声音这三大类型,而在数值类型的...

Day 14 - AI-900 认证心得(2) - 考试

值得一题的是我是用Microsoft Edge浏览器顺利完成报名的, 我也不知道是什麽原因, 要准...

Day15-"与字串相关的函式-1"

我们在之前有说过c的输入输出有scanf跟printf,这两个也都可以拿来输入及输出字串,但scan...

部署 Google App Script 专案(2) & Line Bot 简单回应讯息

昨天我们让 Reply Message 成功从 Read Mail 读取到验证码,今天要进一步让 R...