當前位置:首頁 » 密碼管理 » 雲函數訪問redis

雲函數訪問redis

發布時間: 2022-10-29 01:12:52

1. SpringBoot進階之緩存中間件Redis

大家好,一直以來我都本著 用最通俗的話理解核心的知識點, 我認為所有的難點都離不開 「基礎知識」 的鋪墊

「大佬可以繞過 ~」

本節給大家講講 java的SpringBoot框架」 , 之前我們學習的都是java的基礎知識和底層提供的一些能力,我們日常工作都是在寫介面。在我們在產品開發中,一般我們都會選擇比較穩定的框架來幫我們加速開發,不會自己去造輪子,而在java眾多框架中,spring框架表現的非常好,大部分公司都會首選它作為開發框架,而至今,大部分企業都是以 springboot 來構建項目了,一個穩健的系統需要引入穩定的技術~

如果你是一路看過來的,很高興你能夠耐心看完。前幾期都是帶大家學習了 SpringBoot 的基礎使用以及集成 mybatis 開發,這也是我們寫業務的基礎,如果你還不熟悉這些,請先看完它們。接下來的幾期內容將會帶大家進階使用,會先講解基礎 中間件 的使用和一些場景的應用,或許這些技術你聽說過,沒看過也沒關系,我會帶大家一步一步的入門,耐心看完你一定會有 收獲 ,本期將會給大家講解最熱門的緩存中間件技術 Redis ,同樣的,我們集成到 Springboot 中。最近github可能會被牆,所以我把源碼放到了國內gitee上,本節我們依然使用上期的代碼

Redis 是由義大利人Salvatore Sanfilippo(網名:antirez)開發的一款內存高速緩存資料庫。全稱叫 Remote Dictionary Server(遠程數據服務) 是由 C語言 編寫的,Redis是一個 key-value 存儲系統,它支持豐富的數據類型,如: string、list、set、zset(sorted set)、hash

它本質上是一種鍵值對資料庫,我們之前學習的 mysql 它是持久層的關系型資料庫,而 redis 它的存儲主要存在 內存 中。我們都知道在 內存 中的數據讀取是非常快的,就好比你把一個變數存到磁碟讀取和直接放到代碼中運行,肯定是在代碼中拿到的速度快,因為運行時期,都是直接存到內存的。

給大家總結一下:

有了基本的概念之後,我們下面進行環境搭建,在學習階段,安裝 redis 很簡單,生產環境一般我們也會選擇雲產品,一切為了服務保障,雖說它只是做緩存用,但也是系統的一把 保護傘

如果你是 mac 用戶,你可以運行如下命令:

安裝完成後會提示你運行命令,運行即可。

win 用戶也很簡單,直接下載 redis 軟體,雙擊運行即可,運行之後它會有一個小方塊的圖案,和 locahost:6379 的log,說明運行成功了。初始階段沒有配置的 redis 默認 host 就是本地, port 就是 6379 , 而且是 沒有密碼 就可以訪問的。

推薦一個客戶端軟體 Redis Desktop Manager ,它是 redis 的客戶端界面軟體,方便麵我們學習的時候 清理緩存 使用,生產慎連。

我們不給大家講它的基本命令使用,它也有語法,可以通過類似命令執行,如果想學習的小夥伴,可以自行搜索。本期重點內容是在 sprinboot 中的使用,我們平時開發不可能是去命令行里敲的,都是代碼里執行,而目前市面上有很多封裝好的庫,我們可以直接調用它的方法,很方便的就可以操作它了,不用記一些繁瑣的命令,下面我們就實際操作一下:

修改 pom.xml

修改 application.yml :

redis 默認是有 16 個庫,不是 15 個啊,從 0 開始算的,我們隨便連一個

通過代碼很好理解, 首先需要引入 StringRedisTemplate ,然後需要設置一個 key ,那麼思考一下,這個 key 允許重復嗎

我們進客戶端看一下,發現 key 還是只有一個,但是值變成了新的值了,所以可以得知 key 是唯一的,我們重新設置的時候相當於刷新了它。

redis 中刪除緩存有兩種方式,一種是自我消亡,也就是 過期 銷毀,還有有一種是 主動 銷毀,我們先看一下,過期時間如何設置

我們設置了 10s 後過期,過完10s後發現,這個```key data``消失了。我們在看看如何主動刪除

我們可以利用 Redis 做一個計數器,實現自增功能,你可以用它做網站訪問統計

通常做法,我們會把它封裝一下,後續使用直接引入封裝好的即可,把它直接交給 Springboot容器 管理

其實這個類,你還可以繼續進一步封裝,比如約束 key 的規范,約束過期時間,約束數據類型等等,這一切也都是為了規范和後期維護,防止濫用緩存

緩存的主要場景是用於解決熱點數據問題,因為這些數據是訪問頻率比較高的,當大量的請求進來, mysql 可能壓力很大,這樣一來,數據查詢效率就很慢,用戶肯不高興等了,這樣用戶體驗很不好。所以我們一般做法,都是把這些熱點數據放到緩存里,因為緩存讀取速度很快。當有新數據的時候,我們再及時更新它,一般流程是先查詢緩存,查到了直接返回緩存數據,查不到再走資料庫,然後再刷回緩存。

但是並發足夠大的時候,還是會暴露出很多問題,比如面試常問的一些高頻問題 緩存雪崩、緩存穿透、緩存雪崩 ,這些問題後邊會給大家專門講,和如何去防範。所以總的來說,引入任何一門技術並不是萬事大吉,還需我們不斷的在實踐中積累經驗

本期到這里就結束了,總結一下,我們了解了什麼是 redis ,以及在 springboot 中如何去使用它們,很簡單,沒什麼復雜的東西。但這里想多說一點的是,緩存的設計卻是很復雜的,因為工具是死的,人是活的,我們如何正確設計,需要我們在項目中不斷的積累。

我們之前教大家查詢列表數據,都是所有數據返回,還沒有教大家如何去做分頁,下期將帶大家學習一下 mybatis 分頁插件的使用 ,下期不見不散, 關注我,不迷路~

2. 騰訊雲函數不支持C#

C#語言由於需要編譯後才可以在 CoreCLR 虛擬機中運行。因此在 SCF 中的使用方式,和 Python、Node.js 這類腳本型語言不同,和Java一樣有如下限制:

  • 不支持上傳代碼:使用 C# 語言,僅支持上傳已經開發完成,編譯打包後的 zip 包。SCF 環境不提供 C# 的編譯能力。

  • 不支持在線編輯:不能上傳代碼,所以不支持在線編輯代碼。CoreCLR 運行時的函數,在代碼頁面僅能看到再次通過頁面上傳或 COS 提交代碼的方法。

  • 自定義.NET Custom runtime

    Custom Runtime的封裝工作就是要把各種trigger 的事件封裝一個.NET Standard庫,開發雲函數。自 .NET Core 2.0 開始, 提供了名為IHostedService的新介面,有助於輕松實現託管服務,文章《ASP.NET Core 3.x控制IHostedService啟動順序淺探》有深入的實現分析,基於IHostedService實現一個SCFHostService:

    這里我們把SCF的Custom Runtime 抽象到ISCFHost 中

    在SCFHost 類中完成Custom Runtime的業務處理,接收來自SCF 的事件,轉發給函數進行處理,函數處理的介面 IFunctionInvoker:

    默認實現了FunctionInvoker 把請求信息 返回給 SCF:

    responseBody 代表了SCF函數的不同Trigger事件信息,我們可以根據不同的Trigger 定義不同的處理函數,例如我們處理HttpTrigger的函數為HttpFunctionInvoker:

    上面我們已經完成了最小的MVP封裝,利用.NET Core的依賴注入容器封裝起來,我們定義了一個ISCFBuilder 來組裝函數的配置和服務:

    SCF 雲函數開發

    我們使用.NET Core的控制台程序來開發雲函數,創建一個控制台程序, 引用Yhd.TencentCloud.SCF 包,把Program.cs 替換成類似代碼:

    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.Hosting;
    using Microsoft.Extensions.Logging;
    using System.Threading.Tasks;
    using Yhd.FindJob;
    using Yhd.TencentCloud.SCF.Executors;

    public class Index
    {
    static async Task Main(string[] args)
    {
    var builder = new HostBuilder()
    .ConfigureSCF((context, scfbuilder) =>
    {
    var configuration = scfbuilder.Configuration;

    scfbuilder.Services.AddFindJob(configuration);
    scfbuilder.Services.AddEasyCaching(options =>
    {
    options.UseInMemory();
    //use redis cache that named redis
    options.UseRedis(configuration)
    .WithJson()
    ;
    });
    scfbuilder.Services.AddTransient<IFunctionInvoker, JobsHttpFunctionInvoker>();

    })
    .UseConsoleLifetime();

    var host = builder.Build();

    using (host)
    {
    await host.RunAsync();
    }

    }
    }

    通過ConfigureSCF 可以添加函數的依賴服務,例如上面例子中的EasyCaching 以及函數的服務, 關鍵的一句是 scfbuilder.Services.AddTransient<IFunctionInvoker, JobsHttpFunctionInvoker>(); 把函數的處理邏輯使用JobsHttpFunctionInvoker 進行注入。把函數的配置放到appsettings.json。

    現在SCF 雲函數有個問題是本地Windows開發問題,本地的函數邏輯的測試可以通過單元測試進行。還有函數打包必須在linux環境下進行。

    雲函數部署

    創建 bootstrap 文件

    bootstrap 是運行時入口引導程序文件,Custom Runtime 載入函數時固定檢索 bootstrap 同名文件,並執行該程序來啟動 Custom Runtime 運行時。Custom Runtime 支持任意語言及版本開發運行函數,主要基於 bootstrap 引導程序由開發者自定義實現。其中,bootstrap 需具備以下條件:

  • 需具有可執行許可權。

  • 能夠在 SCF 系統環境(CentOS 7.6)中運行。

  • 下面這個是 .NET Core 3.1的雲函數 bootstrap 文件

    #!/bin/sh
    echo "Start dotnet bootstrap ~~~"
    export DOTNET_ROOT=/opt/rt
    export PATH=$(pwd):/opt/rt:${PATH}
    dotnet ./index/bin/Release/netcoreapp3.1/index.dll

    index.dll 就是我們開發的函數文件。

    成功創建bootstrap和函數文件後,目錄結構如下所示:

    ├ bootstrap
    └ index

    需要在Linux 下執行以下命令,設置文件可執行許可權,並將其添加至 ZIP 包

    部署包準備好後,可以通過雲函數控制台來創建和發布函數

    在騰訊雲雲函數計算上部署.NET Core 3.1的更多相關文章

  • 阿里雲函數計算上部署.NET Core 3.1

    使用阿里雲ECS或者其他常見的VPS服務部署應用的時候,需要手動配置環境,並且監測ECS的行為,做補丁之類的,搞得有點復雜.好在很多雲廠商(阿里雲.Azure等)提供了Serverless服務,藉助於 ...

  • IIS上部署Net.Core

    部署: 1.安裝vc_redist.x64vc_redist.x64 2.安裝DotNetCore.1.0.0.RC2-WindowsHosting 3.安裝DotNetCore.1.0.0-SDK. ...

  • So Easy - 在Linux伺服器上部署 .NET Core App

    .NET Core是微軟提供的免費.跨平台和開源的開發框架,可以構建桌面應用程序.移動端應用程序.網路應用程序.物聯網應用程序和游戲應用程序等.如果你是 Windows 平台下的 dotnet 開發 ...

  • 在IIS上部署 .Net Core 3.0 項目踩坑實錄

    在IIS上部署 .Net Core 3.0 項目的主要流程有: 安裝並啟用IIS 安裝AspNetCoreMoleV2 添加.配置網站 設置應用程序池 通過VS發布 一.安裝並啟用IIS: 安裝了 ...

  • 在CentOS 8 上 部署 .Net Core 應用程序

    在Centos 8 上 部署 .Net Core 應用程序 -- 記錄篇 1.更新dnf 源 1 dnf update 2.安裝 Asp.Net Core 運行時 1 dnf install ...

  • 在騰訊雲&amp;阿里雲上部署JavaWeb項目(Tomcat+MySQL)

    之前做項目都是在本地跑,最近遇到需要在在雲伺服器(阿里雲或者騰訊雲都可以,差不多)上部署Java Web項目的問題,一路上遇到了好多坑,在成功部署上去之後寫一下部署的步驟與過程,一是幫助自己總結記憶, ...

  • ASP.NET Core學習之四 在CentOS上部署.net core

    一.安裝CentOs 以前在大學學過linux,但是對命令行總是有一種深深的排斥感,幾年之後,還是又回來了. 1.下載 現在沒法FQ,就算是FQ網速也是蝸牛一樣慢,我使用阿里雲的鏡像站進行下載速度還是 ...

  • 【netcore入門】在Windows IIS上部署.NET Core 2.1項目

    部署之前先檢查下面2個先決條件是否滿足 1.安裝了 IIS 模塊 win7 在 控制面板→程序和功能→打開或關閉Windows功能→勾選Internet 信息服務(Internet Informati ...

  • CentOS7系統上部署.net core程序

    一.准備工作 首先安裝 xshell和 xftp ,前者用於SSH連接Linux伺服器,後者用於FTP上傳下載文件. xshell和xftp個人使用是免費的,下載地址 之後分別輸入用戶名和密碼登錄主 ...

3. redis是如何執行的

對於任何一門技術,如果你只停留在「會用」的階段,那就很難有所成就,甚至還有被裁員和找不到工作的風險,我相信能看此篇文章的你,一定是積極上進想有所作為的人,那麼藉此機會,我們來深入的解一下 Redis 的執行細節。

一條命令的執行過程有很多細節,但大體可分為:客戶端先將用戶輸入的命令,轉化為 Redis 相關的通訊協議,再用 socket 連接的方式將內容發送給伺服器端,伺服器端在接收到相關內容之後,先將內容轉化為具體的執行命令,再判斷用戶授權信息和其他相關信息,當驗證通過之後會執行最終命令,命令執行完之後,會進行相關的信息記錄和數據統計,然後再把執行結果發送給客戶端,這樣一條命令的執行流程就結束了。如果是集群模式的話,主節點還會將命令同步至子節點,下面我們一起來看更加具體的執行流程。

步驟二:客戶端先將命令轉換成 Redis 協議,然後再通過 socket 連接發送給伺服器端

客戶端和伺服器端是基於 socket 通信的,伺服器端在初始化時會創建了一個 socket 監聽,用於監測鏈接客戶端的 socket 鏈接,源碼如下:

當 socket 成功連接之後,客戶端會先把命令轉換成 Redis 通訊協議(RESP 協議,REdis Serialization Protocol)發送給伺服器端,這個通信協議是為了保障伺服器能最快速的理解命令的含義而制定的,如果沒有這個通訊協議,那麼 Redis 伺服器端要遍歷所有的空格以確認此條命令的含義,這樣會加大伺服器的運算量,而直接發送通訊協議,相當於把伺服器端的解析工作交給了每一個客戶端,這樣會很大程度的提高 Redis 的運行速度。例如,當我們輸入 set key val 命令時,客戶端會把這個命令轉換為 *3 $3 SET $4 KEY $4 VAL 協議發送給伺服器端。 更多通訊協議,可訪問官方文檔: https://redis.io/topics/protocol

擴展知識:I/O 多路復用

Redis 使用的是 I/O 多路復用功能來監聽多 socket 鏈接的,這樣就可以使用一個線程鏈接來處理多個請求,減少線程切換帶來的開銷,同時也避免了 I/O 阻塞操作,從而大大提高了 Redis 的運行效率。

綜合來說,此步驟的執行流程如下:

步驟三:伺服器端接收到命令

當數據大小驗證通過之後,伺服器端會對輸入緩沖區中的請求命令進行分析,提取命令請求中包含的命令參數,存儲在 client 對象(伺服器端會為每個鏈接創建一個 Client 對象)的屬性中。

步驟四:執行前准備

① 判斷是否為退出命令,如果是則直接返回;

② 非 null 判斷,檢查 client 對象是否為 null,如果是返回錯誤信息;

③ 獲取執行命令,根據 client 對象存儲的屬性信息去 redisCommand 結構中查詢執行命令;

④ 用戶許可權效驗,未通過身份驗證的客戶端只能執行 AUTH(授權) 命令,未通過身份驗證的客戶端執行了 AUTH 之外的命令則返回錯誤信息;

⑤ 集群相關操作,如果是集群模式,把命令重定向到目標節點,如果是 master(主節點) 則不需要重定向;

⑥ 檢查伺服器端最大內存限制,如果伺服器端開啟了最大內存限制,會先檢查內存大小,如果內存超過了最大值會對內存進行回收操作;

⑦ 持久化檢測,檢查伺服器是否開啟了持久化和持久化出錯停止寫入配置,如果開啟了此配置並且有持久化失敗的情況,禁止執行寫命令;

⑧ 集群模式最少從節點(slave)驗證,如果是集群模式並且配置了 repl min slaves to write(最小從節點寫入),當從節點的數量少於配置項時,禁止執行寫命令;

⑨ 只讀從節點驗證,當此伺服器為只讀從節點時,只接受 master 的寫命令;

⑩ 客戶端訂閱判斷,當客戶端正在訂閱頻道時,只會執行部分命令(只會執行 SUBSCRIBE、PSUBSCRIBE、UNSUBSCRIBE、PUNSUBSCRIBE,其他命令都會被拒絕)。

⑪ 從節點狀態效驗,當伺服器為 slave 並且沒有連接 master 時,只會執行狀態查詢相關的命令,如 info 等;

⑫ 伺服器初始化效驗,當伺服器正在啟動時,只會執行 loading 標志的命令,其他的命令都會被拒絕;

⑬ lua 腳本阻塞效驗,當伺服器因為執行 lua 腳本阻塞時,只會執行部分命令;

⑭ 事務命令效驗,如果執行的是事務命令,則開啟事務把命令放入等待隊列;

⑮ 監視器 (monitor) 判斷,如果伺服器打開了監視器功能,那麼伺服器也會把執行命令和相關參數發送給監視器 (監視器是用於監控伺服器運行狀態的)。

當伺服器經過以上操作之後,就可以執行真正的操作命令了。

步驟五:執行最終命令,調用 redisCommand 中的 proc 函數執行命令。

步驟六:執行完後相關記錄和統計 ① 檢查慢查詢是否開啟,如果開啟會記錄慢查詢日誌; ② 檢查統計信息是否開啟,如果開啟會記錄一些統計信息,例如執行命令所耗費時長和計數器(calls)加1; ③ 檢查持久化功能是否開啟,如果開啟則會記錄持久化信息; ④ 如果有其它從伺服器正在復制當前伺服器,則會將剛剛執行的命令傳播給其他從伺服器。

步驟七:返回結果給客戶端 命令執行完之後,伺服器會通過 socket 的方式把執行結果發送給客戶端,客戶端再把結果展示給用戶,至此一條命令的執行就結束了。

小結
當用戶輸入一條命令之後,客戶端會以 socket 的方式把數據轉換成 Redis 協議,並發送至伺服器端,伺服器端在接受到數據之後,會先將協議轉換為真正的執行命令,在經過各種驗證以保證命令能夠正確並安全的執行,但驗證處理完之後,會調用具體的方法執行此條命令,執行完成之後會進行相關的統計和記錄,然後再把執行結果返回給客戶端。

4. 移動雲雲資料庫Redis有什麼產品功能緩存應用怎麼樣

首先雲資料庫Redis是一款內存型資料庫,雲資料庫Redis應用場景還挺多的,可用於游戲緩存、互聯網緩存、電商高並發,所以緩存應用是redis最為普遍的用途,各行各業都適用!

5. 如何在雲資料庫 Redis 版設置 IP 白名單

操作步驟


  • 登錄Redis 管理控制台,定位目標實例。


  • 單擊實例 ID 或者管理進入實例信息頁面。


  • 在左側導航欄中選擇安全設置,單擊 default 白名單分組中的修改。
    說明:若您想使用自定義分組,請先單擊 default 白名單分組中清空以刪除默認分組中的IP地址127.0.0.1,然後單擊添加白名單分組新建自定義分組,其餘操作步驟與下述步驟相似。


  • 在修改白名單分組窗口中填寫分組名稱和組內白名單 IP 列表,單擊確認。
    參數說明:


  • 分組名稱:長度為2~32個字元,由小寫字母、數字或下劃線組成,開頭需為小寫字母,結尾需為字母或數字。在白名單分組創建成功後,該名稱將不能被修改。


  • 組內白名單:填寫允許訪問 Redis 實例的 IP 地址或者 IP 段。IP 白名單設置為 0.0.0.0/0 代表允許所有地址訪問,設置為 127.0.0.1 代表禁止所有地址訪問。
    若填寫 IP 段,如10.10.10.0/24,則表示10.10.10.X的IP地址都可以訪問該 Redis 實例。


  • 若您需要添加多個 IP,請用英文逗號隔開,逗號前後都不能加空格。


  • 所有白名單分組總共最多可以添加1000個 IP。

6. 騰訊資料庫版和騰訊雲函數版區別

前者為提供雲資料庫的服務平台,後者為免費運行代碼的計算平台。
騰訊雲資料庫(TencentDB)是騰訊提供的高可靠、高可用、可彈性伸縮的雲資料庫服務產品的總稱。可輕松運維主流開源及商業資料庫(MySQL、Redis、MongoDB、MariaDB、SQL Server、PostgreSQL等),它更擁有容災、備份、恢復、監控、數據傳輸服務、安全服務、災備和智能 DBA 等全套服務。
雲函數(Serverless Cloud Function,SCF)是騰訊雲為企業和開發者們提供的無伺服器執行環境,幫助您在無需購買和管理伺服器的情況下運行代碼。您只需使用平台支持的語言編寫核心代碼並設置代碼運行的條件,即可在騰訊雲基礎設施上彈性、安全地運行代碼。雲函數是實時文件處理和數據處理等場景下理想的計算平台。
如果是海量數據存儲,可以考慮市面上的對象存儲,比如杉岩海量對象存儲MOS,為解決海量非結構數據存儲提供整體解決方案。

7. 遠程連接redis報錯:Connection refused

注釋掉 bind 127.0.0.1 這一行(在前面添加一個 # 就是注釋)。

重啟 redis 服務。

注意: redis 的配置文件位置不是100%一樣,有可能你的伺服器的 redis.config 文件和我的位置不一樣,請注意甄別。

如果還不行,檢查防火牆設置,看看是否有禁止 6379 埠或者限制遠程 ip 訪問。 如果是購買的雲伺服器 ,檢查 安全組 是否放行 6379 埠(例如:如果你購買的是阿里雲的伺服器,則登錄阿里雲的控制台,查看redis所在伺服器的安全組設置)。

將命令中的 88.88.88.88 改成你的 ip 地址,將 6379 改成你的 redis 的埠(默認埠就是 6379 ),將 password 改成你的 redis 授權密碼。

熱點內容
落葉片拍攝腳本 發布:2025-05-14 20:40:49 瀏覽:797
安卓為什麼不能用cmwap 發布:2025-05-14 20:40:43 瀏覽:656
jquery獲取上傳文件 發布:2025-05-14 20:27:57 瀏覽:43
雲web伺服器搭建 發布:2025-05-14 20:25:36 瀏覽:525
汽修汽配源碼 發布:2025-05-14 20:08:53 瀏覽:742
蜜蜂編程官網 發布:2025-05-14 19:59:28 瀏覽:57
優酷怎麼給視頻加密 發布:2025-05-14 19:31:34 瀏覽:635
夢三國2副本腳本 發布:2025-05-14 19:29:58 瀏覽:860
phpxmlhttp 發布:2025-05-14 19:29:58 瀏覽:434
Pua腳本 發布:2025-05-14 19:24:56 瀏覽:449