Redis初識

Redis特性
  • 速度快
    內(nèi)存洲胖、c語言瘫俊、單線程
  • 持久化
    所有數(shù)據(jù)保持在內(nèi)存中鹊杖,對數(shù)據(jù)的更新將異步保存到磁盤上
  • 多種數(shù)據(jù)結(jié)構(gòu)
  • 支持多種客戶端語言
  • 功能豐富
    發(fā)布訂閱悴灵、事務(wù)、Lua腳本骂蓖、pipeline
  • 簡單
    23000行代碼积瞒、不依賴外部庫、單線程模型
  • 主從復(fù)制
  • 高可用登下、分布式
Redis典型應(yīng)用場景
  • 緩存系統(tǒng)
  • 計(jì)數(shù)器
  • 消息隊(duì)列系統(tǒng)
  • 排行榜
  • 社交網(wǎng)絡(luò)
  • 實(shí)時(shí)系統(tǒng)
Redis安裝

wget http://download.redis.io/releases/redis-3.0.7.tar.gz
解壓并轉(zhuǎn)到解壓目錄
ln -s redis-3.0.7 redis //創(chuàng)建軟鏈接
make&&make install

Redis啟動(dòng)
  • 簡單啟動(dòng)
    src/redis-server:開啟redis服務(wù)端
    src/redis-cli -h 127.0.0.1 -p 6379 客戶端連接
  • 配置文件啟動(dòng)
    src/redis-server config.conf
Redis API
通用命令
  • keys(一般不在生產(chǎn)環(huán)境中使用茫孔,時(shí)間復(fù)雜度:O(n))
    keys *遍歷所有的key
    keys [pattern] 遍歷符合正則的key
  • dbsize
    dbsize計(jì)算key的總數(shù)
  • exists
    exists key檢查key是否存在(1:0)
  • del
    del key1 key2刪除指定的key-value
  • expire
    expire key seconds設(shè)置key在seconds秒后過期
  • ttl
    ttl key查看key剩余的過期時(shí)間
  • persist
    persist key 去掉key的過期時(shí)間(-2代表key已經(jīng)不存在;-1代表key存在且沒有過期時(shí)間)
  • type
    type key返回key的類型
字符串
  • 場景
    緩存被芳、計(jì)數(shù)器缰贝、分布式鎖等
  • api
    get、set畔濒、del
    setnx key valuekey不存在才設(shè)置
    set key value xxkey 存在才設(shè)置
    incr keykey自增1剩晴,如果key不存在,自增后get(key)=1
    decr keykey自減1侵状,如果key不存在赞弥,自減后get(key)=-1
    incrby key kkey自增1,如果key不存在趣兄,自增后get(key)=k
    decrby key kkey自減k绽左,如果key不存在,自減后get(key)=-k
    mget key1 key2 key3批量獲取key
    mset key1 value1 key2 value2批量設(shè)置key-value
    getset key newvalue設(shè)置newvalue并返回舊的value
    append key value將value追加到舊的value
    strlen key返回字符串的長度(注意中文)
    incrbyfloat key 3.5增加key對應(yīng)的值3.5
    getrange key start end獲取字符串指定下標(biāo)的所有值
    setrange key index value設(shè)置指定下標(biāo)對應(yīng)的值
哈希
  • 哈希鍵值結(jié)構(gòu)
    key-->{field:value} field不能相同
  • API
    hget key field 獲取hash對應(yīng)key對應(yīng)field的value
    hgetall key獲取hash對應(yīng)key的所有field和value
    hset key field value 設(shè)置hash對應(yīng)key對應(yīng)field的value
    hdel key field刪除hash對應(yīng)key對應(yīng)field的value
    hexists key field判斷hash key是否有field
    hlen key獲取hash key field的數(shù)量
    hmget key field1 field2 field3批量獲取hash key對應(yīng)的一批field對應(yīng)的值
    hmget key field1 value1 field2 value2批量設(shè)置hash key的一批field value
    hincrby key field count 增加整數(shù)艇潭,可填負(fù)數(shù)
    hincrbyfloat key field count增加浮點(diǎn)數(shù)拼窥,可填負(fù)數(shù)
    hvals key返回hash key對應(yīng)的所有field對應(yīng)的value
    hkeys key返回hash key對應(yīng)的所有field
    hsetnx key field valuefield不存在才設(shè)置
列表
  • 特點(diǎn)
    有序、可重復(fù)蹋凝、左右兩邊插入彈出
  • API
    rpush key value1 value2從列表右端插入值
    lpush key value1 value2從列表左端插入值
    linsert key before|after value newvalue在list指定值得前后插入newvalue
    lpop key從list左側(cè)彈出item
    lrem key count value
    根據(jù)value的值鲁纠,從列表中刪除所有與value相等的項(xiàng)
    count>0從左到右;count<0從右到左仙粱;count=0刪除所有
    ltrim key start end按照索引范圍修建列表
    lrange key start end獲取列表指定索引范圍所有item
    lindex key index獲取列表指定索引的item
    llen key計(jì)算列表的長度
    lset key index newvalue設(shè)置列表指定索引值為newvalue
Jedis
  • Jedis(String host, int port, int connectionTimeout, int soTimeout)
    (節(jié)點(diǎn)IP, 節(jié)點(diǎn)端口, 客戶端連接超時(shí), 客戶端讀寫超時(shí))
    Jedis jedis = new Jedis("192.168.186.100",6380)
  • String

jedis.set("hello","world");
jedis.get("hello");
jedis.incr("x");

  • Hash

jedis.hset("user:1:info","address","廣州");
jedis.hget("user:1:info","address");
jedis.hgetAll("user:1:info");

  • List

jedis.rpush("list","4","5","8");
jedis.lpop("list");
jedis.lrange("list",0,-1);

  • Set

jedis.sadd("set","a");
jedis.sadd("set","b","a");
jedis.sadd("set","a");
jedis.srem("set","a","b");
jedis.smembers("set");

  • zset

jedis.zadd("myzset",80,"tom");
jedis.zadd("myzset",80,"jack");
jedis.zadd("myzset",90,"lili");
System.out.println(jedis.zrangeWithScores("myzset", 0, -1));
System.out.println(jedis.zrange("myzset", 0, -1));

    `System.out.println(jedis.zcard("myzset"));`
慢查詢
  • 客戶端請求redis生命周期
    發(fā)送命令-->排隊(duì)-->執(zhí)行命令-->返回結(jié)果
    慢查詢發(fā)生在執(zhí)行命令階段
    客戶端超時(shí)不一定是慢查詢,但慢查詢是客戶端超時(shí)的一個(gè)因素
  • 特點(diǎn)
    先進(jìn)先出隊(duì)列
    固定長度
    保存在內(nèi)存中
  • 參數(shù)
    慢查詢閾值(微秒):slowlog-log-slower-than(0:記錄所有彻舰;1:不記錄)
    最大長度:slowlog-max-len
    config get 參數(shù)名
  • 修改配置文件重啟(不建議)
  • 動(dòng)態(tài)配置
    config set 參數(shù)名
  • 常用命令
    slowlog get [n]獲取慢查詢隊(duì)列
    隊(duì)列信息

    slowlog len獲取慢查詢隊(duì)列長度
    slowlog reset清空慢查詢隊(duì)列
  • tips
    slowlog-log-slower-than不要設(shè)置過大伐割,通常設(shè)置1ms
    slowlog-max-len不要設(shè)置過小,設(shè)置1000左右
    理解命令生命周期
    定期持久化
pipeline流水線
package com.test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.Pipeline;

public class TestPipeline {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("192.168.186.100",6380);
        long start = System.currentTimeMillis();
//        for (int i=0;i<10000;i++){
//            jedis.hset("key","field"+i,"value"+i);//2260
//        }
        for (int i=0;i<=10;i++){
            Pipeline pipeline = jedis.pipelined();
            for (int j=i*1000;j<=(i+1)*100;j++){
                pipeline.hset("key1","field"+j,"value"+j);//47
            }
            pipeline.syncAndReturnAll();
        }
        long end = System.currentTimeMillis();
        System.out.println(end-start);
    }
}

-對比原生的M命令
pipeline命令是非原子性的

  • 注意事項(xiàng)
    1刃唤、注意pipeline每次攜帶的數(shù)據(jù)量
    2隔心、pipeline每次只能作用在一個(gè)redis節(jié)點(diǎn)上
發(fā)布訂閱
  • 發(fā)布命令
    publish channel message返回訂閱者個(gè)數(shù)`
  • 訂閱命令
    subscribe [channel]//一個(gè)或多個(gè)
    psubscribe [pattern]//根據(jù)模式訂閱
    punsubscribe [pattern]//根據(jù)模式退訂
    pubsub channels//列出至少有1個(gè)訂閱者的頻道
    pubsub numsub [channel..]//列出指定頻道訂閱者的數(shù)量
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市尚胞,隨后出現(xiàn)的幾起案子硬霍,更是在濱河造成了極大的恐慌,老刑警劉巖笼裳,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唯卖,死亡現(xiàn)場離奇詭異粱玲,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)拜轨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門抽减,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人橄碾,你說我怎么就攤上這事卵沉。” “怎么了法牲?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵史汗,是天一觀的道長。 經(jīng)常有香客問我拒垃,道長停撞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任恶复,我火速辦了婚禮怜森,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谤牡。我一直安慰自己副硅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布翅萤。 她就那樣靜靜地躺著恐疲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪套么。 梳的紋絲不亂的頭發(fā)上培己,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機(jī)與錄音胚泌,去河邊找鬼省咨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛玷室,可吹牛的內(nèi)容都是我干的零蓉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼穷缤,長吁一口氣:“原來是場噩夢啊……” “哼敌蜂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起津肛,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤章喉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秸脱,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡落包,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了撞反。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妥色。...
    茶點(diǎn)故事閱讀 40,102評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖遏片,靈堂內(nèi)的尸體忽然破棺而出嘹害,到底是詐尸還是另有隱情,我是刑警寧澤吮便,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布笔呀,位于F島的核電站,受9級特大地震影響髓需,放射性物質(zhì)發(fā)生泄漏许师。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一僚匆、第九天 我趴在偏房一處隱蔽的房頂上張望微渠。 院中可真熱鬧,春花似錦咧擂、人聲如沸逞盆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽云芦。三九已至,卻和暖如春贸桶,著一層夾襖步出監(jiān)牢的瞬間舅逸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工皇筛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留琉历,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓水醋,卻偏偏與公主長得像旗笔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子离例,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評論 2 355

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

  • redis典型應(yīng)用場景 1. 緩存系統(tǒng) 2. 計(jì)數(shù)器 3. 消息隊(duì)列系統(tǒng) 4.排行榜 5.社交網(wǎng)絡(luò) 6.實(shí)時(shí)系統(tǒng) ...
    云師兄閱讀 371評論 0 3
  • NOSQL類型簡介鍵值對:會(huì)使用到一個(gè)哈希表换团,表中有一個(gè)特定的鍵和一個(gè)指針指向特定的數(shù)據(jù)悉稠,如redis宫蛆,volde...
    MicoCube閱讀 3,984評論 2 27
  • 1 Redis介紹1.1 什么是NoSql為了解決高并發(fā)耀盗、高可擴(kuò)展想虎、高可用、大數(shù)據(jù)存儲問題而產(chǎn)生的數(shù)據(jù)庫解決方...
    克魯?shù)吕?/span>閱讀 5,295評論 0 36
  • 時(shí)間賦予女人使命叛拷, 去完成一朵花的傳記舌厨, 總要留下點(diǎn)什么, 或是愛情忿薇,或是別的寂靜裙椭。 就像舊情人重逢, 總有扯不清...
    大圣歸去來兮閱讀 743評論 4 6
  • 關(guān)于C 關(guān)于C編程署浩,我覺得有下面3個(gè)層次: 基礎(chǔ) - 基本語法 進(jìn)階 - 避免常見錯(cuò)誤 與 良好的風(fēng)格 高手 - ...
    好好編程閱讀 1,484評論 0 14