Redis簡易入門教程

Redis入門

簡介

Remote Dictionary Server (Redis)
Redis是一個開源的高性能鍵值對數(shù)據(jù)庫蛙讥。它通過提供多種鍵值數(shù)據(jù)類型來適應(yīng)不同場景下的存儲需求漾脂,并借助許多高層級的接口使其可以勝任如緩存、隊列系統(tǒng)等不同的角色歹啼。

它跟memcached類似,不過數(shù)據(jù)可以持久化座菠,而且支持的數(shù)據(jù)類型很豐富狸眼。

截止到2015年6月27日,發(fā)布的最新穩(wěn)定版本是3.0.2浴滴。
3.0版本最大的提升就是redis集群拓萌,一個分布式的redis示例具有數(shù)據(jù)自動分片和高容錯性,以及在高負(fù)載的情況下的速度提升升略。

安裝微王、配置

安裝

下載路徑: http://redis.io/download

安裝命令
$ wget http://download.redis.io/releases/redis-3.0.2.tar.gz
$ tar xzf redis-3.0.2.tar.gz
$ cd redis-3.0.2
$ make

啟動
$ src/redis-server

客戶端
$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"

配置

redis的配置示例文件在%REDIS_HOME%下的redis.conf
里面包含很多默認(rèn)配置
使用配置可以這樣:$ redis-server /etc/redis/6379.conf

daemonize 如果需要在后臺運行,把該項改為yes

pidfile 配置多個pid的地址品嚣,默認(rèn)在/var/run/redis.pid

bind 綁定ip骂远,設(shè)置后只接受自該ip的請求

port 監(jiān)聽端口,默認(rèn)為6379

timeout 設(shè)置客戶端連接時的超時時間腰根,單位為秒

loglevel 分為4級激才,debug、verbose额嘿、notice瘸恼、warning

logfile 配置log文件地址

databases 設(shè)置數(shù)據(jù)庫的個數(shù),默認(rèn)使用的數(shù)據(jù)庫為0

save   設(shè)置redis進行數(shù)據(jù)庫鏡像的頻率册养,保存快照的頻率东帅。  
    第一個參數(shù)表示多長時間,第二個表示執(zhí)行多少次寫操作球拦。
    在一定時間內(nèi)執(zhí)行一定數(shù)量的寫操作時靠闭,自動保存快照帐我。可設(shè)置多個條件愧膀。

rdbcompression 在進行鏡像備份時拦键,是否進行壓縮

Dbfilename 鏡像備份文件的文件名

Dir 數(shù)據(jù)庫鏡像備份的文件放置路徑

Slaveof 設(shè)置數(shù)據(jù)庫為其他數(shù)據(jù)庫的從數(shù)據(jù)庫 

Masterauth 主數(shù)據(jù)庫連接需要的密碼驗證

Requirepass 設(shè)置登錄時需要使用的密碼

Maxclients 限制同時連接的客戶數(shù)量

Maxmemory 設(shè)置redis能夠使用的最大內(nèi)存

Appendonly 開啟append only模式

appendfsync 設(shè)置對appendonly.aof文件同步的頻率

vm-enabled 是否虛擬內(nèi)存的支持

vm-swap-file 設(shè)置虛擬內(nèi)存的交換文件路徑

vm-max-memory 設(shè)置redis使用的最大物理內(nèi)存大小

vm-page-size 設(shè)置虛擬內(nèi)存的頁大小

vm-pages 設(shè)置交換文件的總page數(shù)量

vm-max-threads 設(shè)置VMIO同時使用的線程數(shù)量

glueoutputbuf 把小的輸出緩存存放在一起

hash-max-zipmap-entries 設(shè)置hash的臨界值

activerehashing 重新hash

詳情可參考:http://t.cn/8kr3HUw

數(shù)據(jù)結(jié)構(gòu)及其使用場景

1 string 字符類型
2 hash 散列類型
3 list 列表類型
4 set 集合類型
5 sorted set 有序集合

string 字符串類型

字符串類型是redis最基礎(chǔ)的數(shù)據(jù)類型,是其他4中數(shù)據(jù)類型的基礎(chǔ)檩淋。

命令 描述 示例
SET key value 賦值 set foo 5 ==> OK
GET key 取值 get foo ==> "5"
INCR key 遞增.鍵不存在時創(chuàng)建并賦0芬为,否則+1 incr foo ==> 6
DECR key 遞減 decr foo ==> 5
INCRBY key num 與incr一樣,不過可以指定增加的數(shù)值 incrby foo 5 ==> 10
APPEND key value 追加,返回追加后字符串長度 append foo 24 ==> 4
STRLEN key 長度 strlen foo ==> 4
MSET key value[ key value...] 同時設(shè)置多個鍵值 mset key1 1 key2 2 ==> OK
MGET key[ key...] 同時獲取多個鍵值 mget key1 key2 ==>"1" "2"

字符串就介紹到這里了蟀悦,還有其他命令請自行看官方文檔 ??????

hash 散列類型

散列類型是一個鍵值數(shù)據(jù)結(jié)構(gòu)媚朦,其值只能是字符串,也就是散列數(shù)據(jù)類型不支持嵌套其他數(shù)據(jù)類型日戈。

命令 描述 示例
HSET key field value 設(shè)置或修改字段值 hset user name frek ==> 1
HGET key field 獲取字段值 hget user name ==> "frek"
HMSET key field value[ field value..] 同時設(shè)置多個字段 hmset user name frek age 18 ==> OK
HMGET key field[ field..] 同時獲取多個字段值 hmget user name age ==> "frek" "18"
HGETALL key 獲取鍵中所有字段和值 hgetall user ==> "name" "frek" "age" "18"
HEXISTS key field 判斷字段是否存在询张,存在返回1,否則返回0(如果鍵不存在也返回0) hexists user email ==> 0
HSETNX key field value 當(dāng)字段不存在時賦值 hsetnx user name sam ==> 0 ; HSETNX user email xxx@xxx.com ==> 1
HINCRBY key field increment 參考incrby命令 hincrby user age 1 ==> 19
HKEYS key 獲取鍵中所有字段名 hkeys user ==> "name" "age" "email"
HVALS key 獲取所有的字段值 hvals user ==> "frek" "19" "xxx@xxx.com"
HLEN key 獲取字段數(shù)量 hlen user ==> 3
HDEL key field[ field..] 刪除一個或多個字段,返回刪除的字段數(shù) hdel user email age ==> 2

list 列表類型

列表類型可以存儲一個有序的字符串列表

命令 描述 示例
LPUSH key value[ value..] 向列表的左邊增加元素浙炼,返回增加元素后列表的長度 lpush users fred sam alice ==> 3
RPUSH key value[ value..] 向列表的右邊增加元素 rpush users carl lisa nicesu ==> 6
LPOP key 從列表左邊移除一個元素瑞侮,并返回該元素值 lpop users ==> "fred"
RPOP key 從列表的右側(cè)移除一個元素,并返回該元素值 rpop users ==> "nicesu"
LLEN key 返回列表元素個數(shù)鼓拧,鍵不存在時返回0 llen users ==> 1
LRANGE key start stop 獲取列表片段半火,start和stop支持負(fù)數(shù),-1表示右數(shù)第一個 lrange users 0 -1 ==> "sam" "alice" "carl" "lisa"
LREM key count value 刪除列表中指定的值季俩,返回刪除的元素個數(shù) lrem users 2 sam ==> 1
LINDEX key index 獲取指定索引元素值 lindex users 0 ==> "carl"
LSET key index value 設(shè)置指定索引的元素值 lset users 0 allen ==> OK
LTRIM key start end 只保留列表指定片段钮糖,刪除其他元素 ltrim users 0 1 ==> OK
LINSERT key BEFORE/AFTER pivot value 向列表插入元素,返回插入后列表長度 linsert users after carl adam ==> 3
RPOPLPUSH source destination 將一個元素從一個列表轉(zhuǎn)移到另一個列表,對source執(zhí)行rpop酌住,對destination執(zhí)行l(wèi)push店归,返回被移動的元素值 rpoplpush users usernames ==> "adam"

集合類型

集合中的每個元素都不同,且沒有順序

命令 描述 示例
SADD key member[ member..] 增加一個或多個元素 sadd tags one two three two ==> 3
SREM key member[ member..] 移除一個或多個元素 srem tags two ==> 1
SMEMBERS key 獲取集合中所有的元素 smembers tags ==> "three" "one"
SISMEMBER key member 判斷元素是否存在集合中 sismember tags one ==> 1
SCARD key 獲取集合的元素個數(shù) scard tags ==> 2
SRANDMEMBER key[ count] 返回1個或count個隨機元素 srandmember tags ==> "one"
SDIFF key[ key..] 集合差運算
SINTER key[ key..] 集合交集運算
SUNION key[ key..] 集合并集運算

有序集合類型

在集合類型的基礎(chǔ)上有序集合類型為每個元素都關(guān)聯(lián)了一個分?jǐn)?shù)酪我,這使我們可以使用集合類型的操作之外消痛,還能做與分?jǐn)?shù)有關(guān)的操作。

命令 描述 示例
ZADD key score member[ score member..] 增加一個帶分?jǐn)?shù)的元素都哭,如果已存在秩伞,則替換分?jǐn)?shù) zadd scoreboard 60 fred 89 parker 76 tony 59 nicesu ==> 4
ZSCORE key member 獲得元素分?jǐn)?shù) ZSCORE scoreboard nicesu ==> "59"
ZRANGE key start end[ WITHSCORES] 獲得排名在某個范圍內(nèi)的元素,返回按score升序排序的元素 zrange scoreboard 0 -1 ==> “nicesu" "fred" "tony" "parker"
ZREVRANGE key start end[ WITHSCORES] 與zrange使用一致欺矫,返回按score降序的元素 zrevrange scoreboard 0 -1 withscores ==> "parker" "89" "tony" "76" "fred" "60" "nicesu" "59"
ZRANGEBYSCORE key min max[ WITHSCORES][LIMIT offset count] 獲得指定分?jǐn)?shù)范圍內(nèi)的元素 zrangebyscore scoreboard 60 100 ==> "fred" "tony" "parker"
ZREVRANGEBYSCORE key max min[ WITHSCORES][LIMIT offset count] 獲得指定分?jǐn)?shù)范圍內(nèi)的元素,降序排序 zrevrangebyscore scoreboard 100 60 ==> "parker" "tony" "fred"
ZINCREBY key increment member 增加某個元素的分?jǐn)?shù) zincrby scoreboard 1 nicesu ==> 60
ZCARD key 獲取集合中元素個數(shù) zcard scoreboard ==> 4
ZCOUNT KEY min max 獲得指定分?jǐn)?shù)范圍內(nèi)的元素個數(shù) zcount scoreboard 80 100 ==> 1
ZREM key member[ member..] 刪除一個或多個元素 zrem scoreboard nicesu ==> 1
ZRANK key member 獲取分?jǐn)?shù)從小到大排序的位置 zrank scoreboard parker ==> 2
ZREVRANK key member 同上 zrevrank scoreboard parker ==> 0
ZREMRANGEBYRANK key start stop 按照排名范圍刪除元素
ZREMRANGEBYSCORE key min max 按分?jǐn)?shù)范圍內(nèi)刪除元素

redis與node.js

安裝:

npm install redis
還可以安裝C語言寫的redis庫
npm install hiredis redis
如果安裝了hiredis纱新,node_redis會默認(rèn)調(diào)用hiredis提供的庫

示例:
    var redis = require("redis"),
    // redis.createClient(port, host, option)
    client = redis.createClient(6379, '127.0.0.1', {auth_pass: 'password'});

    // 如果需要切換數(shù)據(jù)庫,如下操作
    // client.select(3, function() { /* ... */ });

    client.on("error", function (err) {
        console.log("Error " + err);
    });

    client.set("string key", "string val", redis.print);
    client.hset("hash key", "hashtest 1", "some value", redis.print);
    client.hset(["hash key", "hashtest 2", "some other value"], redis.print);
    client.hkeys("hash key", function (err, replies) {
        console.log(replies.length + " replies:");
        replies.forEach(function (reply, i) {
            console.log("    " + i + ": " + reply);
        });
        client.quit();
    });        

像mset可以多參數(shù)的命令穆趴,參數(shù)可以使用數(shù)組的方式傳:
client.mset(key1, val1, ... keyn, valn, [callback]);
等價于
client.mset([key1, val1, ... keyn, valn], [callback]);

hmset可以接受多參數(shù)和對象
client.hmset(hashkey, key1, val1, ... keyn, valn, [callback])
等價于
client.hmset(hashkey, obj, [callback])

更多命令使用請參考: https://github.com/NodeRedis/node_redis ??

最后編輯于
?著作權(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
  • 文/潘曉璐 我一進店門导梆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人迂烁,你說我怎么就攤上這事看尼。” “怎么了盟步?”我有些...
    開封第一講書人閱讀 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

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