redis緩存小結(jié)

redis是一個NoSQL數(shù)據(jù)庫翔冀,其在當(dāng)今的互聯(lián)網(wǎng)公司有著和傳統(tǒng)數(shù)據(jù)庫相輔相成的角色。今天來對其進(jìn)行小結(jié)一下。
在寫這個小結(jié)時娱颊,我已工作兩年了,也就是說已經(jīng)使用了兩年redis(雖然公司內(nèi)部使用的是運維同學(xué)的r2m集群轩猩,在京東的同學(xué)應(yīng)該都知道肿轨,其底層就是redis)。所以這里不會說怎么起下載安裝了恃逻,介紹redis的五種數(shù)據(jù)類型了雏搂。這在網(wǎng)上一查一大把,這都是最基礎(chǔ)的使用了 string list set zset hash寇损。
比起常用的數(shù)據(jù)操縱命令畔派,這里主要說說redis的事務(wù)操縱,redis的發(fā)布訂閱(項目中一直在用润绵,可以和消息中間件對比學(xué)習(xí)一下)线椰,以及redis的分布式鎖的使用,最后順便說說pipline的使用尘盼。學(xué)習(xí)任何一個技術(shù)憨愉,首先扒拉一下官方文檔。
Programming with Redis
The full list of commands implemented by Redis, along with thorough documentation for each of them.
Pipelining: Learn how to send multiple commands at once, saving on round trip time.
Redis Pub/Sub: Redis is a fast and stable Publish/Subscribe messaging system! Check it out.
Redis Lua scripting: Redis Lua scripting feature documentation.
Debugging Lua scripts: Redis 3.2 introduces a native Lua debugger for Redis scripts.
Memory optimization: Understand how Redis uses RAM and learn some tricks to use less of it.
Expires: Redis allows to set a time to live different for every key so that the key will be automatically removed from the server when it expires.
Redis as an LRU cache: How to configure and use Redis as a cache with a fixed amount of memory and auto eviction of keys.
Redis transactions: It is possible to group commands together so that they are executed as a single transaction.
Mass insertion of data: How to add a big amount of pre existing or generated data to a Redis instance in a short time.
Partitioning: How to distribute your data among multiple Redis instances.
Distributed locks: Implementing a distributed lock manager with Redis.
Redis keyspace notifications: Get notifications of keyspace events via Pub/Sub (Redis 2.8 or greater).
Creating secondary indexes with Redis: Use Redis data structures to create secondary indexes, composed indexes and traverse graphs.
上述內(nèi)容來自redis的官方文檔:
1.redis是所有實現(xiàn)的命令列表卿捎。
2.redis的pipline
3.redis的pub/sub命令
4.redis的lua腳本
5.redis debug
6.redis內(nèi)存優(yōu)化
7.redis的過期
8.redis的lurkey淘汰算法
9.redis的事務(wù)
10.redis的大數(shù)寫入
11.redis的數(shù)據(jù)在集群上的分片
13.redis分布式鎖
配紫。。午阵。

pipline

using piplining to speedup redis queryies
官方第一句話說的就是躺孝,使用pipline的目的就是為了加快查詢。redis的本質(zhì)是一個tpc的client/server模型底桂,也就是說植袍,一個查詢請求到達(dá)服務(wù)端了,然后等待服務(wù)端處理了籽懦,然后把數(shù)據(jù)再返回給客戶端于个。這個從請求發(fā)出到接收到服務(wù)端返回的消息這段時間就是往返時延。
pipline就是跳過請求-等待-響應(yīng)的這種模式暮顺,即使你一個請求沒有被處理完也可以繼續(xù)發(fā)請求厅篓,這樣就是在客戶端不等待響應(yīng)的情況下可以繼續(xù)向服務(wù)端發(fā)送請求。在最終給你返回你本次這批請求的結(jié)果捶码。
Client: INCR X
Client: INCR X
Client: INCR X
Client: INCR X
Server: 1
Server: 2
Server: 3
Server: 4
這種情況下就不需要為每次請求都等待了羽氮,縮短了往返延時。
pipline不僅僅是在往返延時上進(jìn)行改善惫恼,從服務(wù)器的角度也能大量的降低cpu的使用率档押,比如,你有1000個請
求,原來需要1000次汇荐,現(xiàn)在只需要一次了洞就。

      try {
            jedis = new Jedis("10.10.224.44", 6379);
            Pipeline pipline = jedis .pipelined();
            for(int i =0; i<1000; i++){
                 pipline .incr("hello");
            }
            pl.sync();
        } catch (Exception e) {
            ...
        }

pub/sub

redis的pub/sub其實就是一個消息的發(fā)布和監(jiān)聽的方式,把消息的發(fā)布者和接收者進(jìn)行解耦掀淘。
實際使用案例:
在用lucene做搜索的時候旬蟋,由于生產(chǎn)索引只是在一臺上生產(chǎn),所以革娄,需要把索引從生產(chǎn)的這臺機器上分別放在每一個實例的機器上倾贰,那么問題來了,該怎么告訴那些機器我生產(chǎn)好了呢拦惋?這里就可以使用這個命令匆浙。

  if(索引生產(chǎn)出來了)
    then pub(在指定的頻道發(fā)布了一個消息)

  繼承了jedis subscribe
  if(消息來了)
    then 我就去你的機器上復(fù)制了

在現(xiàn)在消息中間件大行其道的環(huán)境下,還是不推薦使用這種方式來進(jìn)行小心通訊厕妖,消息對于發(fā)布者來說是發(fā)布即消失首尼,訂閱者需要有線程一直來監(jiān)聽消息的發(fā)布。使用mq消息來替代這種方式言秸,

redis 事務(wù)

在一個隊列中软能,一次性的,順序的举畸,排它的執(zhí)行一系列命令查排。
DISCARD
EXEC
MULTI
UNWATCH
WATCH
discard 放棄本次事務(wù)
multi 開啟事務(wù),通常返回一個OK(open session)開啟事務(wù)后抄沮,每次一次操作都是入隊跋核,知道exec,所有隊列的命令才會被提交的叛买。
exec 執(zhí)行事務(wù)(commit)
watch 監(jiān)視一個或者多個key
unwatch 取消watch對所有key的監(jiān)視
multi --> set a 1 set b 2 set c 3 --->exec
watch特別說明砂代。比如我watch的時候,用戶的賬戶余額100塊聪全,在你自己處理一系列后泊藕,還是100塊辅辩,提交的時候就沒問題难礼。如果在這個watch期間被別人修改過了,那么在watch提交會告訴你失敗了玫锋。
redis對事務(wù)的支持是部分支持的蛾茉,因為它是先吧所有命令放在執(zhí)行隊列中,只有執(zhí)行的時候才知道能不能執(zhí)行成功:
multi -->set a aa incr a set b 1--exec
這個命令執(zhí)行完成后撩鹿,只有b=1能成功谦炬,因為a 的value string類型的無法進(jìn)行加一操作,但是redis在未執(zhí)行的時候是不知道的,所以只有在執(zhí)行了键思,才知道是敗了础爬,所以第一條命令失敗了但是第二條set b 1是合法的,是能執(zhí)行成功的吼鳞。
所以看蚜,redis對事務(wù)的支持是部分支持。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赔桌,一起剝皮案震驚了整個濱河市供炎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疾党,老刑警劉巖音诫,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異雪位,居然都是意外死亡竭钝,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門雹洗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜓氨,“玉大人,你說我怎么就攤上這事队伟⊙ù担” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵嗜侮,是天一觀的道長港令。 經(jīng)常有香客問我,道長锈颗,這世上最難降的妖魔是什么顷霹? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮击吱,結(jié)果婚禮上淋淀,老公的妹妹穿的比我還像新娘。我一直安慰自己覆醇,他們只是感情好朵纷,可當(dāng)我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著永脓,像睡著了一般袍辞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上常摧,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天搅吁,我揣著相機與錄音威创,去河邊找鬼。 笑死谎懦,一個胖子當(dāng)著我的面吹牛肚豺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播界拦,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼详炬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了寞奸?” 一聲冷哼從身側(cè)響起呛谜,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎枪萄,沒想到半個月后隐岛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡瓷翻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年聚凹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片齐帚。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡妒牙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出对妄,到底是詐尸還是另有隱情湘今,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布剪菱,位于F島的核電站摩瞎,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏孝常。R本人自食惡果不足惜旗们,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望构灸。 院中可真熱鬧上渴,春花似錦、人聲如沸喜颁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洛巢。三九已至括袒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間稿茉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留漓库,地道東北人恃慧。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像渺蒿,于是被迫代替她去往敵國和親痢士。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1.1 資料 茂装,最好的入門小冊子怠蹂,可以先于一切文檔之前看,免費少态。 作者Antirez的博客城侧,Antirez維護(hù)的R...
    JefferyLcm閱讀 17,056評論 1 51
  • 安全性 設(shè)置客戶端連接后進(jìn)行任何其他指令前需要使用的密碼。 警告:因為redis 速度相當(dāng)快彼妻,所以在一臺比較好的服...
    OzanShareing閱讀 1,737評論 1 7
  • 本文將從Redis的基本特性入手侨歉,通過講述Redis的數(shù)據(jù)結(jié)構(gòu)和主要命令對Redis的基本能力進(jìn)行直觀介紹屋摇。之后概...
    kelgon閱讀 61,166評論 23 625
  • # redis 配置文件示例 # 當(dāng)你需要為某個配置項指定內(nèi)存大小的時候,必須要帶上單位幽邓, # 通常的格式就是 1...
    iyimao閱讀 799評論 0 2
  • # redis 配置文件示例# 當(dāng)你需要為某個配置項指定內(nèi)存大小的時候炮温,必須要帶上單位,# 通常的格式就是 1k ...
    誰在烽煙彼岸閱讀 360評論 0 0