一篇文章讓你懂得Redis

歡迎閱覽

作者介紹:
本人Java特工舰罚,代號:Cris Li ; 中文名:克瑞斯理
簡書地址: http://www.reibang.com/u/c508b0afaaee
CSDN地址: https://blog.csdn.net/jianli95
個人純潔版博客: https://lijian69.github.io/blog/


一、Redis 基礎(chǔ)知識

1.什么是Redis?

Redis現(xiàn)今已經(jīng)成為程序員開發(fā)的必備技能,要是你聽都沒聽說過,回去養(yǎng)豬吧虎眨。也能月入上萬。言歸正傳镶摘。
Redis是由 C語言 編寫嗽桩、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型凄敢、Key-Value數(shù)據(jù)庫碌冶,并提供多種語言的API。redis是nosql(也是個巨大的map) 單線程非關(guān)系型數(shù)據(jù)庫涝缝,可處理1秒10w的并發(fā)(因為數(shù)據(jù)都在內(nèi)存中)扑庞;

2.Redis數(shù)據(jù)類型有哪些?

這個是面試的時候面試官經(jīng)常問到的話題之一拒逮,一不小心你就會掉進(jìn)坑里罐氨。總結(jié)如下

序號 類型 含義
1 String redis的string可以包含任何數(shù)據(jù)滩援。一個鍵最大能存儲512MB栅隐。
2 Hash 與java中的map類似
3 List 可做List,隊列或者棧
4 Set 無序集合
5 ZSet 可以通過分?jǐn)?shù)進(jìn)行有序排序

注意: 隨著你的開發(fā)經(jīng)驗的增加玩徊,僅僅回答以上常用的五種是不太有突破的租悄,還有兩種數(shù)據(jù)類型,如果在面試回答的時候佣赖,面試的時候一定會脫穎而出恰矩,讓面試官對你有印象的记盒。

補充一:Redis 2.8.6之后用于計數(shù)的 HyperLogLong
補充二:用于存儲地理位置信息的 Gro

3.Redis常用的命令憎蛤?

清空Redis所有key

flush db   # 清除當(dāng)前數(shù)據(jù)庫的所有keys
flush all    # 清除所有數(shù)據(jù)庫的所有keys

查詢匹配key

keys *            # 查看所有keys
keys prefix_*     # 查看前綴為"prefix_"的所有keys

key基本操作

exists key        # 確認(rèn)一個key是否存在
set key value   # 設(shè)置key和value
get key         # 獲取key的value
del key         # 刪除一個key
type key        # 返回值的類型
keys pattern    # 返回滿足給定pattern的所有key
random key      # 隨機返回key空間的一個
key rename oldname newname    # 重命名key
db size         # 返回當(dāng)前數(shù)據(jù)庫中key的數(shù)目
select index    # 選擇第0~15中的庫
move key dbindex      # 移動當(dāng)前數(shù)據(jù)庫中的key到dbindex數(shù)據(jù)庫

設(shè)置key的生存時間

expire key seconds    #設(shè)置key的有效時間  單位為秒
ttl key               #獲取key的剩余有效時間,持久key返回-1,key不存在返回-2俩檬,具體時間返回秒數(shù)
persist key           #設(shè)置有時效性的key為持久key

String類型

INCR key    # 遞增數(shù)字萎胰,僅僅對數(shù)字類型的鍵有用,相當(dāng)于Java的i++運算
INCRBY key increment    # key自增increment,increment可以為負(fù)數(shù)棚辽,表示減少技竟。
DECR key    # 遞減數(shù)字,僅僅對數(shù)字類型的鍵有用屈藐,相當(dāng)于Java的i–-
DECRBY key decrement    # key自減decrement榔组,decrement可以為正數(shù),表示增加联逻。
INCRBYFLOAT key increment    # 增加指定浮點數(shù)搓扯,僅僅對數(shù)字類型的鍵有用
APPEND key value    # 向尾部追加值,相當(dāng)于append方法
STRLEN key    # 獲取字符串長度
MSET key1 value1 [key2 value2 ...]    # 同時設(shè)置多個key的值
MGET key1 [key2 ...]                  #  同時獲取多個key的值

List類型

rpush key value    # 在名稱為key的list尾添加一個值為value的元素
lpush key value    # 在名稱為key的list頭添加一個值為value的 元素
llen key    # 返回名稱為key的list的長度
lrange key start end    # 返回名稱為key的list中start至end之間的元素
ltrim key start end     # 截取名稱為key的list
lindex key index    # 返回名稱為key的list中index位置的元素
lset key index value    # 給名稱為key的list中index位置的元素賦值
lrem key count value    # 刪除count個key的list中值為value的元素
lpop key    # 返回并刪除名稱為key的list中的首元素
rpop key    # 返回并刪除名稱為key的list中的尾元素
rpoplpush srckey dstkey    # 返回并刪除名稱為srckey的list的尾元素,并將該元素添加到名稱為dstkey的list的頭部

Set類型

sadd key member    # 向名稱為key的set中添加元素member
srem key member    # 刪除名稱為key的set中的元素member
spop key    # 隨機返回并刪除名稱為key的set中一個元素
smove srckey dstkey member    # 移到集合元素
scard key    # 返回名稱為key的set的基數(shù)
sismember key member    # member是否是名稱為key的set的元素
sinter key1 key2 …key   # 求交集
sinterstore dstkey keys    # 求交集并將交集保存到dstkey的集合
sunion key1 keys    # 求并集
sunionstore dstkey keys    # 求并集并將并集保存到dstkey的集合
sdiff key1 keys    # 求差集
sdiffstore dstkey keys    # 求差集并將差集保存到dstkey的集合
smembers key    # 返回名稱為key的set的所有元素
srandmember key    # 隨機返回名稱為key的set的一個元素

Zset類型

ZADD key score1 value1 [score2 value2 score3 value3 ...]    #  添加元素
ZSCORE key value    # 獲取元素的分?jǐn)?shù)
ZRANGE key start stop [WITHSCORE]    # 獲取排名在某個范圍的元素包归,按照元素從小到大的順序排序锨推,從0開始編號,包含start和stop對應(yīng)的元素公壤,WITHSCORE選項表示是否返回元素分?jǐn)?shù)
ZREVRANGE key start stop [WITHSCORE]    # 獲取排名在某個范圍的元素换可,和上一個命令用法一樣,只是這個倒序排序的厦幅。
ZRANGEBYSCORE key min max    # 獲取指定分?jǐn)?shù)范圍內(nèi)的元素沾鳄,包含min和max,(min表示不包含min确憨,(max表示不包含max洞渔,+inf表示無窮大
ZINCRBY key increment value    # 增加某個元素的分?jǐn)?shù)
ZCARD key    # 獲取集合中元素的個數(shù)
ZCOUNT key min max    # 獲取指定分?jǐn)?shù)范圍內(nèi)的元素個數(shù),min和max的用法和5中的一樣
ZREM key value1 [value2 ...]    # 刪除一個或多個元素
ZREMRANGEBYRANK key start stop    # 按照排名范圍刪除元素
ZREMRANGEBYSCORE key min max    # 按照分?jǐn)?shù)范圍刪除元素缚态,min和max的用法和4中的一樣
ZRANK key value    # 獲取正序排序的元素的排名
ZREVRANK key value    # 獲取逆序排序的元素的排名

Hash類型

HSET key field value    # 賦值
HMSET key field1 value1 [field2 values]    # 一次賦值多個字段
HSET key field    # 取值
HMSET key field1 [field2] # 一次取多個字段的值
HGETALL key    # 一次取所有字段的值
HEXISTS key field    # 判斷字段是否存在
HSETNX key field value    # 當(dāng)字段不存在時賦值
HDEL key field    # 刪除字段
HKEYS key    # 獲取所有字段名
HVALS key    # 獲取所有字段值
HLEN key    # 獲取字段數(shù)量

3.Redis持久化

為什么需要Redis持久化技術(shù)磁椒?Redis數(shù)據(jù)放在主機的內(nèi)存中,若無持久化玫芦,在主機意外關(guān)機浆熔,宕機等非正常操作的時候,數(shù)據(jù)將全部丟失桥帆,開啟持久化,使 Redis數(shù)據(jù) <=======> 磁盤數(shù)據(jù) 可以進(jìn)行雙向操作医增。

Redis的三種持久化方式

序號 方式 優(yōu)缺點
1 RDB 它是Redis早期版本默認(rèn)的持久化方式,通過在指定時間間隔內(nèi)生成數(shù)據(jù)集的時間點快照進(jìn)行數(shù)據(jù)的持久化老虫。
2 AOF 記錄服務(wù)器所有的寫操作叶骨,持久化時,重新執(zhí)行寫命令
3 RDB+AOF混合 Redis-4.0默認(rèn)的持久化方式

RDB介紹

通過以下命令進(jìn)行持久化

Save # 堵塞式持久化 不推薦使用
BGSave  # 非堵塞式持久化方式祈匙,推薦使用

RDB方式的優(yōu)點: 性能好忽刽、恢復(fù)數(shù)據(jù)的速度快天揖、全量進(jìn)行、隨時還原不同版本
AOF方式的優(yōu)點: 生成的備份文件可讀性高跪帝、增量進(jìn)行今膊、但是文件的體積大,恢復(fù)的時間長

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末伞剑,一起剝皮案震驚了整個濱河市斑唬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌黎泣,老刑警劉巖恕刘,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異抒倚,居然都是意外死亡雪营,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門衡便,熙熙樓的掌柜王于貴愁眉苦臉地迎上來献起,“玉大人,你說我怎么就攤上這事镣陕∏床停” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵呆抑,是天一觀的道長岂嗓。 經(jīng)常有香客問我,道長鹊碍,這世上最難降的妖魔是什么厌殉? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮侈咕,結(jié)果婚禮上公罕,老公的妹妹穿的比我還像新娘。我一直安慰自己耀销,他們只是感情好楼眷,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著熊尉,像睡著了一般罐柳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上狰住,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天张吉,我揣著相機與錄音,去河邊找鬼催植。 笑死肮蛹,一個胖子當(dāng)著我的面吹牛勺择,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蔗崎,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼扰藕!你這毒婦竟也來了缓苛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤邓深,失蹤者是張志新(化名)和其女友劉穎未桥,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芥备,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡冬耿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了萌壳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片亦镶。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖袱瓮,靈堂內(nèi)的尸體忽然破棺而出缤骨,到底是詐尸還是另有隱情,我是刑警寧澤尺借,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布绊起,位于F島的核電站,受9級特大地震影響燎斩,放射性物質(zhì)發(fā)生泄漏虱歪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一栅表、第九天 我趴在偏房一處隱蔽的房頂上張望笋鄙。 院中可真熱鬧,春花似錦怪瓶、人聲如沸局装。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铐尚。三九已至,卻和暖如春哆姻,著一層夾襖步出監(jiān)牢的瞬間宣增,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工矛缨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留爹脾,地道東北人帖旨。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像灵妨,于是被迫代替她去往敵國和親解阅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354