国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Redis 應(yīng)用場景

2019-11-08 20:38:54
字體:
供稿:網(wǎng)友

非常感謝http://blog.csdn.net/zhu_tianwei/article/details/44892247

一、Redis使用場景

1.取最新N個數(shù)據(jù)的操作比如典型的取你網(wǎng)站的最新文章,通過下面方式,我們可以將最新的5000條評論的ID放在Redis的List集合中,并將超出集合部分從數(shù)據(jù)庫獲取使用LPUSH latest.comments<ID>命令,向list集合中插入數(shù)據(jù)插入完成后再用LTRIM latest.comments 0 5000命令使其永遠只保存最近5000個ID然后我們在客戶端獲取某一頁評論時可以用下面的邏輯(偽代碼)

[plain] view plain copy PRint?在CODE上查看代碼片派生到我的代碼片FUNCTION get_latest_comments(start,num_items):      id_list = redis.lrange("latest.comments",start,start+num_items-1)      IF id_list.length < num_items          id_list = SQL_DB("SELECT ... ORDER BY time LIMIT ...")      END      RETURN id_list  END  如果你還有不同的篩選維度,比如某個分類的最新N條,那么你可以再建一個按此分類的List,只存ID的話,Redis是非常高效的。2.排行榜應(yīng)用,取TOP N操作這個需求與上面需求的不同之處在于,前面操作以時間為權(quán)重,這個是以某個條件為權(quán)重,比如按頂?shù)拇螖?shù)排序,這時候就需要我們的sorted set出馬了,將你要排序的值設(shè)置成sorted set的score,將具體的數(shù)據(jù)設(shè)置成相應(yīng)的value,每次只需要執(zhí)行一條ZADD命令即可。3.需要精準設(shè)定過期時間的應(yīng)用比如你可以把上面說到的sorted set的score值設(shè)置成過期時間的時間戳,那么就可以簡單地通過過期時間排序,定時清除過期數(shù)據(jù)了,不僅是清除Redis中的過期數(shù)據(jù),你完全可以把Redis里這個過期時間當成是對數(shù)據(jù)庫中數(shù)據(jù)的索引,用Redis來找出哪些數(shù)據(jù)需要過期刪除,然后再精準地從數(shù)據(jù)庫中刪除相應(yīng)的記錄。4.計數(shù)器應(yīng)用Redis的命令都是原子性的,你可以輕松地利用INCR,DECR命令來構(gòu)建計數(shù)器系統(tǒng)。5.Uniq操作,獲取某段時間所有數(shù)據(jù)排重值這個使用Redis的set數(shù)據(jù)結(jié)構(gòu)最合適了,只需要不斷地將數(shù)據(jù)往set中扔就行了,set意為集合,所以會自動排重。6.實時系統(tǒng),反垃圾系統(tǒng)通過上面說到的set功能,你可以知道一個終端用戶是否進行了某個操作,可以找到其操作的集合并進行分析統(tǒng)計對比等。沒有做不到,只有想不到。7.Pub/Sub構(gòu)建實時消息系統(tǒng)Redis的Pub/Sub系統(tǒng)可以構(gòu)建實時的消息系統(tǒng),比如很多用Pub/Sub構(gòu)建的實時聊天系統(tǒng)的例子。8.構(gòu)建隊列系統(tǒng)使用list可以構(gòu)建隊列系統(tǒng),使用sorted set甚至可以構(gòu)建有優(yōu)先級的隊列系統(tǒng)。9.緩存這個不必說了,性能優(yōu)于Memcached,數(shù)據(jù)結(jié)構(gòu)更多樣化。

二、Redis數(shù)據(jù)結(jié)構(gòu)使用場景1.String—字符串String 數(shù)據(jù)結(jié)構(gòu)是簡單的 key-value 類型,value 不僅可以是 String,也可以是數(shù)字(當數(shù)字類型用 Long 可以表示的時候encoding 就是整型,其他都存儲在 sdshdr 當做字符串)。使用 Strings 類型,可以完全實現(xiàn)目前 Memcached 的功能,并且效率更高。還可以享受 Redis 的定時持久化(可以選擇 RDB 模式或者 AOF 模式),操作日志及 Replication 等功能。除了提供與 Memcached 一樣的 get、set、incr、decr 等操作外,Redis 還提供了下面一些操作:LEN niushuai:O(1)獲取字符串長度APPEND niushuai redis:往字符串 append 內(nèi)容,而且采用智能分配內(nèi)存(每次2倍)設(shè)置和獲取字符串的某一段內(nèi)容設(shè)置及獲取字符串的某一位(bit)批量設(shè)置一系列字符串的內(nèi)容原子計數(shù)器GETSET 命令的妙用,請于清空舊值的同時設(shè)置一個新值,配合原子計數(shù)器使用2.Hash—字典在 Memcached 中,我們經(jīng)常將一些結(jié)構(gòu)化的信息打包成 hashmap,在客戶端序列化后存儲為一個字符串的值(一般是 JSON 格式),比如用戶的昵稱、年齡、性別、積分等。這時候在需要修改其中某一項時,通常需要將字符串(JSON)取出來,然后進行反序列化,修改某一項的值,再序列化成字符串(JSON)存儲回去。簡單修改一個屬性就干這么多事情,消耗必定是很大的,也不適用于一些可能并發(fā)操作的場合(比如兩個并發(fā)的操作都需要修改積分)。而 Redis 的 Hash 結(jié)構(gòu)可以使你像在數(shù)據(jù)庫中 Update 一個屬性一樣只修改某一項屬性值。存儲、讀取、修改用戶屬性3.List—列表List 說白了就是鏈表(redis 使用雙端鏈表實現(xiàn)的 List),相信學(xué)過數(shù)據(jù)結(jié)構(gòu)知識的人都應(yīng)該能理解其結(jié)構(gòu)。使用 List 結(jié)構(gòu),我們可以輕松地實現(xiàn)最新消息排行等功能(比如新浪微博的 TimeLine )。List 的另一個應(yīng)用就是消息隊列,可以利用 List 的 *PUSH 操作,將任務(wù)存在 List 中,然后工作線程再用 POP 操作將任務(wù)取出進行執(zhí)行。Redis 還提供了操作 List 中某一段元素的 API,你可以直接查詢,刪除 List 中某一段的元素。微博 TimeLine消息隊列4.Set—集合Set 就是一個集合,集合的概念就是一堆不重復(fù)值的組合。利用 Redis 提供的 Set 數(shù)據(jù)結(jié)構(gòu),可以存儲一些集合性的數(shù)據(jù)。比如在微博應(yīng)用中,可以將一個用戶所有的關(guān)注人存在一個集合中,將其所有粉絲存在一個集合。因為 Redis 非常人性化的為集合提供了求交集、并集、差集等操作,那么就可以非常方便的實現(xiàn)如共同關(guān)注、共同喜好、二度好友等功能,對上面的所有集合操作,你還可以使用不同的命令選擇將結(jié)果返回給客戶端還是存集到一個新的集合中。共同好友、二度好友利用唯一性,可以統(tǒng)計訪問網(wǎng)站的所有獨立 ip好友推薦的時候,根據(jù) tag 求交集,大于某個 threshold 就可以推薦5.Sorted Set—有序集合和Sets相比,Sorted Sets是將 Set 中的元素增加了一個權(quán)重參數(shù) score,使得集合中的元素能夠按 score 進行有序排列,比如一個存儲全班同學(xué)成績的 Sorted Sets,其集合 value 可以是同學(xué)的學(xué)號,而 score 就可以是其考試得分,這樣在數(shù)據(jù)插入集合的時候,就已經(jīng)進行了天然的排序。另外還可以用 Sorted Sets 來做帶權(quán)重的隊列,比如普通消息的 score 為1,重要消息的 score 為2,然后工作線程可以選擇按 score 的倒序來獲取工作任務(wù)。讓重要的任務(wù)優(yōu)先執(zhí)行。帶有權(quán)重的元素,比如一個游戲的用戶得分排行榜比較復(fù)雜的數(shù)據(jù)結(jié)構(gòu),一般用到的場景不算太多

轉(zhuǎn)至:

http://www.ttlsa.com/redis/redis-the-author-talks-about-redis-application-scenario/

http://github.thinkingbar.com/redis-use-situation/


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 万载县| 称多县| 商南县| 永兴县| 南投市| 林州市| 乐昌市| 洮南市| 漳州市| 铁岭市| 永兴县| 巧家县| 阜新| 射洪县| 阿合奇县| 隆化县| 南通市| 门头沟区| 博湖县| 连城县| 罗江县| 西华县| 乐东| 航空| 香格里拉县| 周宁县| 社会| 五常市| 衡阳市| 蛟河市| 青河县| 平昌县| 大余县| 宁陕县| 乳山市| 盐津县| 福泉市| 宝清县| 普洱| 莱芜市| 竹北市|