日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

在.Net项目中使用Redis作为缓存服务

發布時間:2023/12/4 asp.net 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在.Net项目中使用Redis作为缓存服务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近由于項目需要,在系統緩存服務部分上了redis,終于有機會在實際開發中玩一下,之前都是自己隨便看看寫寫,很零碎也沒沉淀下來什么,這次算是一個系統學習和實踐過程的總結。

?

和Redis有關的基礎知識


Redis是一個開源的分布式NoSql數據庫,可以用來做緩存服務、消息隊列、數據存儲等等,數據類型之豐富,效率之高,簡直逆天!沒有了解過的可以移步去問度娘~客戶端之豐富,足可見它的社區有多強大:

其中C#的客戶端就有這么多:

沒錯,我們的項目里也選擇了最熱門的StackExchange.Redis作為底層服務。

Redis雖然也可以部署在window上,但效率會大打折扣,所以通常都是部署在linux上跑,剛好我在上次部署.net core 項目時創建了一個centos虛擬機,可以直接拿來用,不會配虛擬機的同學可以點這里。Redis服務部署網上有很多教程,在此就略過了。

在這里向大家推薦一款redis圖形化操作的客戶端Redis Studio,比Redis Desktop Manager好用太多,誰用誰知道!可以查看運行情況、查看數據和類型、查看剩余有效時間、刷新數據、刪除數據,甚至可以直接在圖形界面配置redis,再也不用去配置文件里懵逼了。

當然,以上操作都可以在redis服務開啟后用redis-cli工具實現。

?

基礎操作封裝

緩存的基礎操作無非就是get、set這些,所以統一定義了一個接口:

里面用StackExchange.Redis提供的API來實現這些操作,代碼太多就不貼出來了。其中對redis的連接做了連接池處理,連接對象ConnectionMultiplexer封裝在一個阻塞隊列里面,每次讀寫操作的時候去隊列里面取,用完再放回,在應用啟動的時候會初始化這個連接池。

創建連接的時候有兩種方式,第一種是使用連接字符串的形式,把需要的參數寫在一個字符串中:

第二種是使用ConfigurationOptions對象:

其中EndPoints是redis服務器的地址,做集群的時候可以寫多個。為了搞清楚里面參數的含義,從github上clone了一份StackExchange.Redis的源碼來看,非常清晰。在看源碼的過程中發現底層都有記錄redis的詳細運行情況,但都是寫在Stream里,于是自己基于系統的log4net日志然后根據它的實現重寫了一套TextWriter來實現日志持久化,用于日后來分析錯誤:

在做泛型操作封裝的時候遇到一個問題:我想把一個復雜對象整存整取。第一個想到的辦法是序列化,但總覺得這樣干會拖累redis的性能,覺得不爽不想用。然后是用redis的hash類型,但是操作起來非常不方便,而且沒辦法存集合,也pass了,其他的類型翻了源碼看只支持int、string、bool這些,也不行。沒辦法還是序列化吧,然后想起來張善友老師推薦的protobuf,說是性能超級棒,于是就用了,發現它是用Stream來轉化的,莫非這就是它性能高的原因?哪位大神指點下~

?

用redis自定義session存儲

緩存服務搭起來后就打算把session搬到里面去,便于做分布式和統一狀態管理。很簡單,重寫一套SessionStateStoreProviderBase就行了,然后跟著園子里焰尾迭的博客《分布式中Redis實現Session終結篇》做了一套,但是發現跑不起來,應該和我的封裝有關,由于時間問題就先放下了,直接上nuget找了一個現成的,看中了Microsoft.Web.RedisSessionStateProvider,想著既然是我軟官方出的應該沒什么大問題,另外這個SessionStateProvider也是依賴于StackExchange.Redis,與項目中的一致于是果斷下載安裝了。接下來不得不夸一下微軟的細節處理啊,下載完立馬蹦出個readme告訴我安裝結果:

要不然還要研究這個東西怎么用,按照里面的提示打開web.config,發現在<system.web>節點下幫我們自動加了一個節點sessionState,里面定義了和session有關的配置,最重要的是配置模板都給出來了,連數據類型都標記的清清楚楚:

眾所周知微軟一直向他的開發者推崇傻瓜式操作,但這些細節真的是太貼心了,根據自己的redis服務器信息配置一下關鍵信息就ok了。寫個session測試一下,頁面跑起來了redis里面也查到session值了(被編碼了),太TM爽啊~100個大寫的贊。。。

?

最后,把系統中臨時用的HttpContext.Cache和靜態Dictionary全部用redis替換掉,然后build、run、ok。

?

總結

經過這幾天的實踐算是打開了redis的大門走出了第一步,今后系統開發和運行中肯定還會遇到很多問題,也不是說在程序用redis實現get、set就是學會了,現在接觸到的只是最基礎的東西,后面還要學習一下redis的高級用法,例如pub/sub、master/slave、集群等。

? ??

問題

1、序列化那里心里還是有梗,有沒有更好的解決方案?而且用protobuf的話要在類名和屬性上打標簽,這個有點憂桑啊~

2、有人說把session放到redis后可以解決session阻塞的問題,測試了一下好像不行啊,哪位大神知道真相的還請指點一二~

相關文章:

  • Redis到底該如何利用(一)?

  • Redis到底該如何利用(二)?

  • Redis 3.0.0正式版發布,高性能 K/V 服務

  • 用Docker構建分布式Redis集群

  • 推薦–個通用緩存接口抽象類庫:CacheManager

  • asp.net core 使用 Redis 和 Protobuf 進行 Session 緩存

  • C#使用Redis集群緩存

  • Azure Redis 緩存的 ASP.NET 會話狀態提供程序

  • 搜狐視頻Redis私有云cachecloud開源了


原文地址:http://www.cnblogs.com/hohoa/p/5771255.html


.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注

總結

以上是生活随笔為你收集整理的在.Net项目中使用Redis作为缓存服务的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。