免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

Redis該怎么使用

本篇內容主要講解“redis該怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Redis該怎么使用”吧!

創新互聯建站于2013年成立,先為寧陜等服務建站,寧陜等地企業,進行企業商務咨詢服務。為寧陜企業網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。

使用場景

在我的項目里,有一個提供給Autocomplete的功能,數據量大概在幾萬。這篇文章里我用姓名檢索的例子來說明,列表請戳來自Redis作者的Demo。

在這樣的列表里全是用戶名,例如我們的系統里有一個用戶對象:

public Class User
{     public string Id{get; set;}  
     public string Name {get; set;}
     ....     public string UserHead {get; set;}    
}

系統里需要一個用戶的下拉列表,由于數據量大不能一次顯示完,于是就加上了一個AutoComplete功能。如果是不用Redis這樣的集中式緩存,直接緩存在本機內存里,那么結構很簡單如下:

var users = new List<User>{...};//讀到一個用戶列表MemoryCache.Set("capqueen:users", users);//放入內存//讀取var users = MemoryCache.Get<List<User>>("capqueen:users");

因為都是在內存里,所以直接存List就可以了,搜索的時候也可以直接的如下:

var findUsers = users.Where(user => user.Name.StartWith("A")).ToList();例如輸入的字符是 “A“

相當簡單,完全不用考慮如何存儲,存儲的數據結構。但是換到了Redis這些集中式緩存服務之后,咱們再來思考,該如何存儲。

方案一:類似內存式的緩存實現。

本文里使用的Redis鏈接庫是StactkExchange.Redis,出自StackOverFlow的開源產品。

var db = redis.GetDataBase();//獲取0數據庫var usersJson = JsonConvert.SerializeObject(users)//序列化db.StringSet("capqueen:users", usersJson);//存儲var usersString = db.StringGet("capqueen:users");
var userList = JsonConvert.DeserializeObject<List<User>>(users);//反序列化

上面的方式邏輯上是沒有問題的,編譯也可以通過。但是仔細想一想,Redis作為獨立的緩存服務和appSever是分開來的,這樣的讀取方式對redis服務器的IO是個負擔,甚至這樣的讀取比本地內存緩存慢了太多了。

那如何解決呢?試想key-value的精髓是在于Key,那么對于List來說應該要把item分開來存儲。

方案二:Keys模糊匹配。

在查看了Redis的命令文檔(見參考資料4)之后,發現了命令Keys,如獲至寶,立馬修改了方案。首先我們需要把要搜索的關鍵詞建立為key,這里我把key定義為 "capqueen:user:{id}:{name}",其中{}內的是要用item對應屬性替換的。代碼如下:

var redis = ConnectionMultiplexer.Connect("localhost");var db = redis.GetDatabase();           
var users = new List<User> { new User{Id = 6, Name = "aaren", Age=10},    new User{Id = 7, Name = "issy", Age=11},    new User{Id = 8, Name = "janina", Age=13},    new User{Id = 9, Name = "karena", Age=14}
};

users.ForEach(item => { 
   var key = string.Format("capqueen:user:{0}:{1}", item.Id, item.Name);   var value = JsonConvert.SerializeObject(item);
   db.StringSet(key, value);
});

所有的user都以單獨的Key-Value方式存儲,那么如何利用Keys搜索呢?我們來看下Redis的Keys命令:

KEYS pattern

查找所有符合給定模式 pattern 的 key 。

KEYS * 匹配數據庫中所有 key 。
KEYS h?llo 匹配 hello , hallo 和 hxllo 等。
KEYS h*llo 匹配 hllo 和 heeeeello 等。
KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo 。
特殊符號用 \ 隔開

也就是說Keys能夠進行簡單的模糊匹配,那么我們這里的搜索就可以換成如下的方式:

var redis = ConnectionMultiplexer.Connect("192.168.10.178");var db = redis.GetDatabase();var server = redis.GetServer("192.168.10.178", 6379);var keys = server.Keys(pattern: "capqueen:user:*:a*");var values = db.StringGet(keys.ToArray());//反序列化var jsonValues = new StringBuilder("[");
values.ToList().ForEach(item => jsonValues.Append(item).Append(","));
jsonValues.Append("]");var userList = JsonConvert.DeserializeObject<List<User>>(jsonValues.ToString());

注意以上的代碼里,因為每個value是一個json,為了增加轉化時的效率,我先處理成json arry再進行反序列化。

這種方案,確實是解決了我目前的問題,然而我注意到了Redis文檔里的一段話:

KEYS 的速度非常快,但在一個大的數據庫中使用它仍然可能造成性能問題,如果你需要從一個數據集中查找特定的 key ,你最好還是用 Redis 的集合結構(set)來代替。

到此,相信大家對“Redis該怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是創新互聯網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

網頁標題:Redis該怎么使用
標題路徑:http://m.newbst.com/article40/pooeho.html

成都網站建設公司_創新互聯,為您提供外貿建站企業建站品牌網站制作App設計Google網站建設

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站優化排名