初識Redis(一):Redis簡介及數(shù)據(jù)類型

Redis簡介

Redis是一款開源免費甩牺、高性能的非關(guān)系型數(shù)據(jù)庫

非關(guān)系型數(shù)據(jù)庫(Not Only SQL): 簡稱是NoSQL扼菠,一般我們習(xí)慣解釋成非關(guān)系型數(shù)據(jù)庫存和,其實應(yīng)該理解成不止是關(guān)系型數(shù)據(jù)庫,或者超關(guān)系型數(shù)據(jù)庫。一般用來存儲不規(guī)范储玫、復(fù)雜的數(shù)據(jù)形式。相比關(guān)系型數(shù)據(jù)庫,非關(guān)系型數(shù)據(jù)庫性能更好翅雏,擴展性更強,但是對于財務(wù),金融,銀行等規(guī)模巨大,流程規(guī)范人芽,數(shù)據(jù)格式統(tǒng)一的行業(yè)來講望几,使用關(guān)系數(shù)據(jù)庫更佳。

Redis特點

  • 數(shù)據(jù)類型豐富
  • 支持master-slave模式的數(shù)據(jù)備份
  • 支持?jǐn)?shù)據(jù)持久化萤厅,可將內(nèi)存中的數(shù)據(jù)保存在磁盤
  • 性能極高
  • 所有操作都是原子性操作

原子性操作: A賬戶有3000塊錢橄抹,B賬戶有2000塊錢,現(xiàn)在從A賬戶向B賬戶轉(zhuǎn)1000塊錢惕味,要做如下兩個操作: 1. 從A賬戶中減去1000塊錢楼誓,那么A賬戶現(xiàn)在有2000塊錢;2. B賬戶加上1000塊錢名挥, 那么B賬戶現(xiàn)在有3000塊錢疟羹。如果在A賬戶減去1000塊錢的時候,忽然發(fā)生了意外,比如停電榄融、斷網(wǎng)之類的参淫,導(dǎo)致轉(zhuǎn)賬這個操作中止了,此時A賬戶的錢已經(jīng)減去了愧杯,但是B賬戶沒有增加1000塊錢涎才,那么我們就稱這個操作失敗了,要進(jìn)行回滾力九∷M回滾就是回到?jīng)]轉(zhuǎn)賬之前的狀態(tài),此時A賬戶照常有3000塊跌前,B賬戶有2000塊业扒。

這種要么一起成功(A賬戶減少1000塊,B賬戶增加1000塊)舒萎,要么一起失敵檀ⅰ(A、B賬戶都回到原來狀態(tài)臂寝,A有3000塊錢章鲤,B有2000塊錢)的操作就叫原子性操作。

Redis安裝

  1. 下載Redis源碼

    redis-3.2.1

  2. 解壓

    tar xzvf redis-3.2.1.tar.gz

  3. 編譯安裝

    cd redis-3.2.1
    make && make install

ps:遇上 `Hint: It's a good idea to run 'make test';` ,我們可以先安裝tcl工具 `yum install tcl` 咆贬,然后執(zhí)行 `make test` 進(jìn)行檢測败徊。得到 `\o/ All tests passed without errors!` 的提示,就說明安裝成功掏缎。
  1. 默認(rèn)安裝的路徑

    Redis客戶端: /usr/local/bin/redis-cli

    Redis服務(wù)端: /usr/local/bin/redis-server

  2. 啟動Redis

    啟動Redis服務(wù):[root@CentOS6 /]# redis-server

Redis配置密碼

  1. 不重啟Redis皱蹦,設(shè)置密碼

    127.0.0.1:6379> config set requirepass 123456
    OK
    127.0.0.1:6379> 
    127.0.0.1:6379> config get requirepass
    (error) NOAUTH Authentication required.
    
  2. 修改配置文件,設(shè)置密碼

    redis.conf 配置文件中修改密碼眷蜈,#requirepass foobared, 去掉前面的注釋沪哺,并設(shè)置自己的密碼,保存配置文件并重啟

    ps:重啟的時候一定需要指定修改后的配置文件酌儒,否則密碼設(shè)置不起效

Redis數(shù)據(jù)類型

Redis數(shù)據(jù)類型

字符串

字符串是Redis最基本的數(shù)據(jù)類型辜妓,一個key對應(yīng)一個value,一個key最大能存儲512MB忌怎。
常用字符串命令
  • SET key value 設(shè)置指定 key 的值
  • SETX key timeout value 設(shè)置指定 key 的值及過期時間
  • GET key 獲取指定 key 的值
  • GETRANGE key start end 截取key中的字符串
  • GETSET key value 重置key的值籍滴,并返回key的舊值(key沒有舊值時,返回nil)
  • SETBIT key offset value 設(shè)置key所存儲的字符串榴啸,offset位上的值(offset上的值為0或1)
  • GETBIT key offset 獲取key所存儲的字符串孽惰,offset位上的值
  • STRLEN key 返回 key 所存儲的字符串的長度
  • INCRBY key increment 將 key 所存儲的值加上特定的增量 increment
  • DECRBY key decrement 將 key 所存儲的值減去特定的減量值 decrement
  • APPEND key value 如果 key 已經(jīng)存在,并且是一個字符串鸥印,APPEND命令將 value 追加到原value的末尾
特點
  • 自增勋功、自減
  • 位運算
常用應(yīng)用場景
  • 利用 setbit腥例、getbit、bitcount 統(tǒng)計用戶簽到酝润、活躍用戶(注意:bitcount的start燎竖、end參數(shù)指的是字符串的位置,不是對應(yīng)位的位置)
  • 利用 INCR做原子計數(shù)器要销,生成唯一序列號
  • 設(shè)置 key 有效期构回,上操作鎖或者防止短時間內(nèi)頻繁發(fā)送短信驗證

哈希

一個哈希數(shù)據(jù),里面包含了N對鍵值對
常用哈希命令
  • HSET key field value 將哈希表 key 中的字段 field 的值設(shè)為 value

  • HMSET key field1 value1 field2 value2 將多個 field-value(域-值)對設(shè)置到哈希表 key 中

  • HSETNX key field value 當(dāng)字段 field 不存在時疏咐,設(shè)置哈希表字段值

  • HLEN key 獲取哈希表中字段的數(shù)量

  • HKEYS key 獲取哈希表中所有的字段

  • HGET key field 獲取存儲在哈希表中指定字段的值

  • HMGET key field1 field2 獲取所有給定字段的值

  • HGETALL key 獲取哈希表 key 中纤掸,所有的字段和值

  • HVALS key 獲取哈希表中所有的值

  • HEXISTS key field 查看哈希表 key 中,指定的字段是否存在

  • HINCRBY key field increment 為哈希表 key 中指定字段加上增量 increment

  • HSCAN key cursor [MATCH pattern] [COUNT count] 分批次遍歷哈希表 key 中的鍵值對浑塞,cursor為0時表示開始一次新的遍歷借跪,每次遍歷返回來的cursor,作為下次遍歷的cursor酌壕,直至遍歷返回的cursor為0時掏愁,代表剛好結(jié)束一次完整的key遍歷(cursor類似接力棒,從0到0代表一次完整的遍歷卵牍。HSCAN命令并且有match匹配功能

  • HDEL key field1 field2 刪除一個或多個字段

特點
  • 數(shù)據(jù)結(jié)構(gòu)有明顯的層級關(guān)系
常用應(yīng)用場景
  • 存儲有層級關(guān)系果港,并且部分?jǐn)?shù)據(jù)需要變更的,如用戶信息

列表

一個列表糊昙,包含了N個字符串
  • LPUSH key string1 往列表左側(cè)插入一個或多個值
  • RPUSH key string1 往列表右側(cè)插入一個或多個值
  • LINSERT key BEFORE/AFTER oldString newString 在列表指定元素前(后)插入一個值(元素不存在或列表不存在辛掠,則不執(zhí)行任何操作)
  • LSET key index string 通過索引設(shè)置列表元素的值
  • LINDEX key sindex 通過索引獲取列表中的元素
  • LLEN key 獲取列表的長度
  • LRANGE key start stop 獲取列表指定范圍內(nèi)的元素
  • LPOP key 移出列表中的第一個元素,并返回移出的元素
  • RPOP key 移出列表中的最后一個元素释牺,并返回移出的元素
  • BLPOP key time 移出列表中的第一個元素萝衩,并返回移出的元素,如果列表為空没咙,則在time秒之后彈出nil
  • BRPOP key time 移出列表中的最后一個元素猩谊,并返回移出的元素,如果列表為空镜撩,則在time秒之后彈出nil
  • BRPOPLPUSH key1 key2 timekey1最右側(cè)的元素彈出到key2的最左側(cè)预柒,如果key1沒有元素队塘,則等待time秒后袁梗,彈出nil
  • LREM key count string 移除列表中與string相等的元素,共移除count個憔古,如果count大于0遮怜,則從表頭向表尾搜索,如果count小于0鸿市,則從表尾向表頭搜索
  • LTRIM key start stop 只保留startstop區(qū)間的元素锯梁,其余元素均移除
特點
  • 有序即碗,自由實現(xiàn)堆、棧的功能
  • 輪詢監(jiān)控
  • 索引取區(qū)間
常用應(yīng)用場景
  • 利用 LTRIM key start stop獲取網(wǎng)站最后5個訪問用戶陌凳、最新消息排行榜
  • 利用PUSH POP當(dāng)成隊列剥懒,進(jìn)行多任務(wù)處理
  • 利用BRPOPLPUSH key1 key1 time,使用相同的key作為BRPOPLPUSH的兩個參數(shù),無限循環(huán)整個列表合敦,比如:一個服務(wù)器監(jiān)控程序初橘,并行檢查一組網(wǎng)站,確保網(wǎng)站的可訪問性
  • 利用BRPOP key time進(jìn)行事件提醒充岛,在新元素到達(dá)時立即處理保檐,新元素未到達(dá)一直阻塞住,避免輪詢占用資源

集合(Set)

一個集合(key)崔梗,包含了N個集合成員(value)夜只。集合成員是無序的,且是唯一的蒜魄,一個集合最多可以有2^32 - 1個成員
  • SADD key value1 value2 向集合添加一個或多個成員
  • SMEMBERS key 獲取一個集合中所有的成員
  • SCARD key 獲取集合的成員數(shù)
  • SISMEMBER key member 判斷member是否是集合key的成員
  • SPOP key 移除并返回集合中的一個隨機元素
  • SRANDMEMBER key [count] 返回集合中一個或多個隨機元素
  • SREM key member1 [member2] 移除集合中一個或多個成員
  • SDIFF key1 key2 返回 key1相對于key2的差集(key1有扔亥,key2沒有)
  • SDIFFSTORE destination key1 [key2] 返回給定所有集合的差集并存儲在 destination 中(key1有,key2沒有)
  • SINTER key1 [key2] 返回給定所有集合的交集
  • SINTERSTORE destination key1 [key2]
    返回給定所有集合的交集并存儲在 destination 中
  • SUNION key1 [key2] 返回所有給定集合的并集(key1Ukey2
  • SUNIONSTORE destination key1 [key2] 所有給定集合的并集存儲在 destination 集合中
  • SMOVE source destination member 將 member 元素從 source 集合移動到 destination 集合
  • SSCAN key cursor [MATCH pattern] [COUNT count] 分批次遍歷集合 key 中的鍵值對谈为,cursor為0時表示開始一次新的遍歷砸王,每次遍歷返回來的cursor,作為下次遍歷的cursor峦阁,直至遍歷返回的cursor為0時谦铃,代表剛好結(jié)束一次完整的key遍歷(cursor類似接力棒,從0到0代表一次完整的遍歷榔昔。SSCAN命令并且有match匹配功能
特點
  • 唯一性
  • 差集驹闰、并集
常用應(yīng)用場景

有序集合(sorted set)

和集合相似(一個key,N個value诵肛,value唯一)屹培,不同點是每個元素都會關(guān)聯(lián)一個double類型的分?jǐn)?shù),Redis通過分?jǐn)?shù)為集合成員進(jìn)行排序
  • ZADD key score1 value1 [score2 value2] 向有序集合添加一個或多個成員怔檩,或者更新已存在成員的分?jǐn)?shù)
  • ZCARD key 獲取有序集合的成員數(shù)
  • ZCOUNT key min max 計算在指定區(qū)間內(nèi)的成員數(shù)
  • ZINCRBY key increment value 對指定成員加上增量increment
  • ZINTERSTORE newKey numbers key1 key2key1``key2的交集存入newKey中褪秀,newKey中元素的分?jǐn)?shù)是key1key2中分?jǐn)?shù)之和(使用時一定要指定正確的 Key Number)
  • ZLEXCOUNT key min max 當(dāng)元素的分?jǐn)?shù)都相等時,此命令返回指定字符區(qū)間之內(nèi)的元素(如:ZLEXCOUNT z1 [a [cz1有序集合所有元素分?jǐn)?shù)相同的情況下薛训,返回z1中a~c之間的元素)
  • ZRANGE key start stop 返回指定索引區(qū)間的元素(下標(biāo)參數(shù)start``stop都以0為底)
  • ZRANGEBYLEX key min max 返回指定字典區(qū)間內(nèi)的元素(例:ZRANGEBYLEX Z1 [a [b返回集合Z1ab之間的元素)
  • ZRANGEBUSCORE key min max 返回指定分?jǐn)?shù)之間的元素
  • ZRANK key value 返回有序集合中指定元素的索引
  • ZREM key value 移除有序集合中的指定成員
  • ZREMRANGEBYLEX key min max刪除指定字典區(qū)間的元素
  • ZREMRANGEBYRANK key start stop 刪除指定索引區(qū)間內(nèi)的元素
  • ZREMRANGEBYSCORE key min max 刪除指定分?jǐn)?shù)區(qū)間的所有元素
  • ZREVRANGE key start stop 返回指定索引區(qū)間內(nèi)的成員媒吗,分?jǐn)?shù)從高到低
  • ZREVRANGEBYSCORE key max min 返回指定分?jǐn)?shù)區(qū)間的成員,分?jǐn)?shù)從高到低
  • ZREVRANK key member 返回有序集合中指定元素的排名(排名由分?jǐn)?shù)值從大到小排列乙埃,分?jǐn)?shù)最大的元素排名為0)
  • ZSCORE key value 返回指定元素的分?jǐn)?shù)
  • ZUNIONSTORE newKey numkeys key [key ...] 計算給定的有序集合的并集闸英,并存儲在newKey
  • ZSCAN key cursor [MATCH pattern] [COUNT count]
    分批次遍歷有序集合 key 中的鍵值對锯岖,cursor為0時表示開始一次新的遍歷,每次遍歷返回來的cursor甫何,作為下次遍歷的cursor出吹,直至遍歷返回的cursor為0時,代表剛好結(jié)束一次完整的key遍歷(cursor類似接力棒辙喂,從0到0代表一次完整的遍歷趋箩。ZSCAN命令并且有match匹配功能
特點
  • 可以按照索引、字典區(qū)間加派、分?jǐn)?shù)區(qū)間3個不同的維度取數(shù)據(jù)叫确、刪數(shù)據(jù)
  • 可以自定義數(shù)據(jù)的順序
  • 可求并集、交集
應(yīng)用場景
  • 帶權(quán)重的隊列(List只是按照時間排序的隊列芍锦,有序集合可以實現(xiàn)自定義權(quán)重的隊列)
  • 列出游戲中前100名高分的選手
  • 利用區(qū)間取值和排序的功能竹勉,可以用做分頁
附上一個Redis命令在線操作的地址 Redis命令在線操作地址

如果這篇文章對你有幫助,請點個贊哈娄琉,感謝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末次乓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子孽水,更是在濱河造成了極大的恐慌票腰,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件女气,死亡現(xiàn)場離奇詭異杏慰,居然都是意外死亡,警方通過查閱死者的電腦和手機炼鞠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門缘滥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谒主,你說我怎么就攤上這事朝扼。” “怎么了霎肯?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵擎颖,是天一觀的道長。 經(jīng)常有香客問我观游,道長搂捧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任备典,我火速辦了婚禮异旧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘提佣。我一直安慰自己吮蛹,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布拌屏。 她就那樣靜靜地躺著潮针,像睡著了一般。 火紅的嫁衣襯著肌膚如雪倚喂。 梳的紋絲不亂的頭發(fā)上每篷,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音端圈,去河邊找鬼焦读。 笑死,一個胖子當(dāng)著我的面吹牛舱权,可吹牛的內(nèi)容都是我干的矗晃。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼宴倍,長吁一口氣:“原來是場噩夢啊……” “哼张症!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鸵贬,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤俗他,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后阔逼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體兆衅,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年嗜浮,在試婚紗的時候發(fā)現(xiàn)自己被綠了涯保。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡周伦,死狀恐怖夕春,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情专挪,我是刑警寧澤及志,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站寨腔,受9級特大地震影響速侈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜迫卢,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一倚搬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧乾蛤,春花似錦每界、人聲如沸捅僵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽庙楚。三九已至,卻和暖如春趴樱,著一層夾襖步出監(jiān)牢的瞬間馒闷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工叁征, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留纳账,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓捺疼,卻偏偏與公主長得像疏虫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子帅涂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

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

  • phpredis是php的一個擴展Redis::__construct構(gòu)造函數(shù)$redis = new Redis...
    hello大象閱讀 762評論 0 2
  • PHP-redis中文文檔 phpredis是php的一個擴展议薪,效率是相當(dāng)高有鏈表排序功能,對創(chuàng)建內(nèi)存級的模塊業(yè)務(wù)...
    神秘者007閱讀 2,724評論 0 2
  • phpredis是PHP的一個擴展媳友,效率是相當(dāng)高有鏈表排序功能斯议,對創(chuàng)建內(nèi)存級的模塊業(yè)務(wù)關(guān)系很有用;以下是redis...
    史史小子閱讀 327評論 0 2
  • Redis::__construct構(gòu)造函數(shù)$redis = new Redis(); connect, open...
    bycall閱讀 1,398評論 0 2
  • 我是土生土長的山西人,在千禧年時來到2000多公里外的東北城市—長春醇锚,讀書哼御,工作,安身立命焊唬。在這里已經(jīng)度過了...
    凡心素語閱讀 366評論 1 1