Redis簡明教程

一直想寫一篇關于Redis的教程,給自己對Redis的學習做個總結糊肠。這里寫一個簡明教程,大概簡述下Redis是什么遗锣,有什么特性货裹,可以做什么,怎么去運維和監(jiān)控精偿。


1. Redis是什么

初次接觸Redis大概是在18年弧圆,那時候只知到Redis是一套緩存系統赋兵,可以緩存數據庫的查詢結果,可以緩存session搔预,可以用來替換memcached霹期。深入學習之后才發(fā)現Redis可以做的事情可多了,但是最常見的應用場景估計還是緩存拯田。

1.1 Redis的定義

Redis是一個開源(BSD許可)历造,內存存儲的數據結構服務器,可用作數據庫船庇,高速緩存和消息隊列代理帕膜。
這是從Redis中文網找到的Redis的定義。這里分開來解析下:

  1. Redis是基于內存的溢十,所以它很快垮刹。
  2. Redis有多種數據結構,這就是它和memcached的一個不同张弛,memcached只支持string類型荒典,而Redis還支持哈希、列表吞鸭、集合寺董、有序集合以及在這個基礎上衍生的更多的數據類型。
  3. 因為多樣的數據類型刻剥,Redis可以用來做數據庫遮咖、高速緩存甚至是消息隊列。

1.2 Redis的特性

  1. Redis是單線程的造虏,雖然是單線程御吞,但是它很快。并且因為它的單線程特性漓藕,所以服務端處理模型也非常簡單陶珠,不用考慮并發(fā)的沖突。
  2. 比起memcache享钞,Redis支持多種的數據機構揍诽,并且還可以做持久化。持久化的方式有RDB和AOF兩種栗竖。
  3. Redis還支持主從復制暑脆,可以做集群。
  4. 快狐肢,非程砺穑快。主要是由于基于內存以及單線程的特性处坪,官方給出的讀寫性能可以達到10萬/秒架专。

1.3 Redis的應用場景

  1. 緩存:和Memcached一樣玄帕,用來緩存數據庫查詢的結果部脚。
  2. 排行榜系統:這是由于其有序集合的數據類型裤纹。
  3. 社交網絡:這是由于集合類型委刘,可以做集合運算。
  4. 消息隊列:Redis提供了發(fā)布訂閱功能和阻塞隊列的功能鹰椒。雖然在功能性上比不上專業(yè)的消息隊列,但是基本的需求還是可以滿足的漆际。

2. Redis的數據結構

Redis支持多種的數據結構,這里做個大概的介紹奸汇。

2.1 string(字符串)

字符串是Redis中最基礎的數據類型施符,可以簡單認為這是一個鍵值對。字符串類型的值可以是字符串擂找、數字甚至是二進制戳吝,最大不能超過512M。常用的命令包括:

##設置及獲取鍵值
set key value
get key 
#刪除
del key
##批量設置和獲取鍵值
mset key value
mget key
##自增自減
incr key
decr key

字符串類型的應用常見通常為緩存系統听哭,這就是和memcached一樣的地方塘雳。此外陆盘,Redis還適合做計數器粉捻,因為它的自增和自減的性能非常高。

2.2 hash(哈希)

Redis的哈希數據類型與python中的字典基本一致肩刃,這是一個鍵值對的結構杏头,形如value={{field1盈包,value1}醇王,...{fieldN,valueN}}寓娩。在這里說的value指的是field(字段)的值呼渣,而不是key的值寞埠,需要和前面的字符串類型做區(qū)別。常用的命令包括:

##設置和獲取鍵值
hset key field value
hget key field
##刪除
hdel key field
##計算field個數
hlen key
##批量設置和獲取鍵值
hmget key field
hmset key field
##獲取所有的鍵仁连、值和鍵值
hkeys key
hvals key
hgetall key

哈希數據類型可以明顯看出是基于字符串類型的,所以哈希也可以用在緩存的場景下的饭冬,并且有更高的壓縮率。此外由于哈希數據類型增加字段非常簡單昌抠,如果用來替換關系型數據庫,最大的優(yōu)點就是增加字段幾乎不花時間麦乞。

2.3 list(列表)

這是一個雙向的鏈表,兩端都可以pop和push數據姐直。就是說它可以充當棧和隊列的角色。LPUSH然后LPOP那就是后進先出蒋畜,這就是棧声畏,LPUSH然后RPOP那就是先進先出,這就是隊列姻成,這是消息隊列的基礎。常見的命令如下:

##增均牢、刪才睹、查徘跪、改
lpush key value
rpush key value
lpop key
rpop key
lrange key start end
lset key index newValue
##阻塞操作
blpop key [key ...] timeout
brpop key [key ...] timeout

blpop和brpop是lpop和rpop的阻塞版本琅攘,在列表為空的時候:如果timeout=3,那么客戶端要等到3秒后返回坞琴,如果timeout=0哨查,那么客戶端一直阻塞等下去剧辐。這種情況是不是很容易想到消息隊列呢邮府?

列表類型的應用場景如上面多次提到的消息隊列溉奕,另外它還很適合做文章的列表,畢竟本來就叫做列表類型嘛腐宋。

2.4 set(集合)

集合就是和數學中的集合一樣,就是說它能夠支持對應的集合運算胸竞。對比列表類型,集合類型最大的不同就是它里面的數據是亂序的煎饼,不能通過索引下標獲取元素,并且要求里面的所有數據都不能重復吆玖,必須唯一马篮。常見的命令如下:

2.4.1 集合內操作

#增沾乘、刪
sadd key element
srem key element
#計算元素個數
scard key
#判斷元素是否在集合中
sismember key element
#隨機返回元素
srandmember key [count]
#從集合隨機彈出元素
spop key
#獲取所有元素
smembers key

2.4.2 集合間操作

#交集
sinter key [key ...]
#并集
suinon key [key ...]
#差集
sdiff key [key ...]

很明顯的數據特點浑测,我們可以用集合運算來發(fā)現不同用戶的相同興趣。

2.5 sorted set(有序集合)

在集合的基礎上掷匠,我們給每個元素加上分數岖圈,然后就可以用分數來做排序了讹语。在有序集合中蜂科,元素不可以重復,但是元素可以重復擎值,畢竟一個班級里面考試分數相同也很正常。有序集合的常用命令如下:

2.5.1 集合內

#添加成員
zadd key score member
#計算成員個數
zcard key
#計算某個成員的分數
zscore key member
#計算成員的排名
zrank key member
zrevrank key member
#刪除成員
zrem key member #
#增加成員的分數
zincrby key increment member
#返回指定排名范圍的成員
zrange key start end [withscores]
zrevrange key start end [withscores]
#返回指定分數范圍的成員
zrangebyscore key min max [withscores] [limit offset count]
zrevrangebyscore key max min [withscores] [limit offset count]

2.5.2 集合間的操作

#交集
zinterstore destination numkeys key [key ...] [weights weight [weight ...]] [aggregate sum|min|max]
#并集
zunionstore destination numkeys key [key ...] [weights weight [weight ...]] [aggregate sum|min|max]

有了分數,這很明顯用來做排行榜就很合適了厕氨。

2.6 其他數據類型

Redis在這幾個基礎數據類型的上衍生了其他的數據結構进每,比如位圖命斧,hyperloglogs 等等,這里不做介紹贤徒。有興趣可以點擊鏈接查看。

3.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末接奈,一起剝皮案震驚了整個濱河市通孽,隨后出現的幾起案子,更是在濱河造成了極大的恐慌背苦,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秕噪,死亡現場離奇詭異厚宰,居然都是意外死亡腌巾,警方通過查閱死者的電腦和手機固阁,發(fā)現死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碉克,“玉大人并齐,你說我怎么就攤上這事】鐾剩” “怎么了?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵测垛,是天一觀的道長。 經常有香客問我号涯,道長目胡,這世上最難降的妖魔是什么链快? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮巨双,結果婚禮上霉祸,老公的妹妹穿的比我還像新娘筑累。我一直安慰自己脉执,他們只是感情好,可當我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布婆廊。 她就那樣靜靜地躺著巫橄,像睡著了一般淘邻。 火紅的嫁衣襯著肌膚如雪湘换。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天筹我,我揣著相機與錄音帆离,去河邊找鬼蔬蕊。 笑死哥谷,一個胖子當著我的面吹牛,可吹牛的內容都是我干的们妥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼旅赢,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鲜漩?” 一聲冷哼從身側響起集惋,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎刮刑,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體泛烙,經...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡翘紊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了帆疟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡自赔,死狀恐怖柳琢,靈堂內的尸體忽然破棺而出绍妨,到底是詐尸還是另有隱情柬脸,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布灾测,位于F島的核電站,受9級特大地震影響行施,放射性物質發(fā)生泄漏。R本人自食惡果不足惜蛾号,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一涯雅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦精刷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勘畔。三九已至丽惶,卻和暖如春炫七,著一層夾襖步出監(jiān)牢的瞬間钾唬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工奕巍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人伍绳。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓乍桂,卻偏偏與公主長得像冲杀,于是被迫代替她去往敵國和親睹酌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內容

  • Redis是啥旺芽?用Redis官方的話來說就是: Redis is an open source (BSD lice...
    柳樹之閱讀 5,181評論 5 209
  • 前言 Redis是目前最火爆的內存數據庫之一辐啄,通過在內存中讀寫數據,大大提高了讀寫速度壶辜,可以說Redis是實現網站...
    小陳阿飛閱讀 805評論 0 1
  • 《Redis 入門指南》(第二版) 第一章 Redis 是什么 Redis (REmote Dictionary ...
    EdenPP閱讀 67,310評論 3 10
  • 兒子發(fā)來消息,說可以視頻抵怎,我心莫名的慌奋救,正在掃地的我回復:“等我一會兒反惕。”又補充:“等我把地掃完姿染,掃到一半,謝謝....
    燕子聊家常閱讀 492評論 0 4
  • 父母的小院盔粹,打點得脈絡清晰。哪里是花舷嗡,哪里是樹嵌莉,哪里是見縫插針的蔬菜,都一一布局锐峭,這都拜老父親精心所致。 花是不允...
    天馬行空云飛揚閱讀 283評論 0 3