redis入門

來源:互聯網
上載者:User

標籤:

簡介

Remote Dictionary Server (Redis)
Redis是一個開源的高效能索引值對資料庫。它通過提供多種索引值資料類型來適應不同情境下的儲存需求,並藉助許多高層級的介面使其可以勝任如緩衝、隊列系統等不同的角色。

它跟memcached類似,不過資料可以持久化,而且支援的資料類型很豐富。

截止到2015年6月27日,發布的最新穩定版本是3.0.2。
3.0版本最大的提升就是redis叢集,一個分布式的redis樣本具有資料自動分區和高容錯性,以及在高負載的情況下的速度提升。

安裝、配置安裝

下載路徑: 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-cliredis> set foo barOKredis> get foo"bar"
配置

redis的配置樣本檔案在%REDIS_HOME%下的redis.conf
裡麵包含很多預設配置
使用配置可以這樣:$ redis-server /etc/redis/6379.conf

daemonize 如果需要在後台運行,把該項改為yespidfile 配置多個pid的地址,預設在/var/run/redis.pidbind 綁定ip,設定後只接受自該ip的請求port 監聽連接埠,預設為6379timeout 設定用戶端串連時的逾時時間,單位為秒loglevel 分為4級,debug、verbose、notice、warninglogfile 配置log檔案地址databases 設定資料庫的個數,預設使用的資料庫為0save   設定redis進行資料庫鏡像的頻率,儲存快照的頻率。      第一個參數表示多長時間,第二個表示執行多少次寫操作。    在一定時間內執行一定數量的寫操作時,自動儲存快照。可設定多個條件。rdbcompression 在進行鏡像備份時,是否進行壓縮Dbfilename 鏡像備份檔案的檔案名稱Dir 資料庫鏡像備份的檔案放置路徑Slaveof 設定資料庫為其他資料庫的從資料庫 Masterauth 主要資料庫串連需要的密碼驗證Requirepass 設定登入時需要使用的密碼Maxclients 限制同時串連的客戶數量Maxmemory 設定redis能夠使用的最大記憶體Appendonly 開啟append only模式appendfsync 設定對appendonly.aof檔案同步的頻率vm-enabled 是否虛擬記憶體的支援vm-swap-file 設定虛擬記憶體的分頁檔路徑vm-max-memory 設定redis使用的最大實體記憶體大小vm-page-size 設定虛擬記憶體的頁大小vm-pages 設定分頁檔的總page數量vm-max-threads 設定VMIO同時使用的線程數量glueoutputbuf 把小的輸出緩衝存放在一起hash-max-zipmap-entries 設定hash的臨界值activerehashing 重新hash

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

資料結構及其使用情境

1 string 字元類型
2 hash 散列類型
3 list 清單類型
4 set 集合類型
5 sorted set 有序集合

string 字串類型

字串類型是redis最基礎的資料類型,是其他4中資料類型的基礎。

命令 描述 樣本
SET key value 賦值 set foo 5 ==> OK
GET key 取值 get foo ==> "5"
INCR key 遞增.鍵不存在時建立並賦0,否則+1 incr foo ==> 6
DECR key 遞減 decr foo ==> 5
INCRBY key num 與incr一樣,不過可以指定增加的數值 incrby foo 5 ==> 10
APPEND key value 追加,返回追加後字串長度 append foo 24 ==> 4
STRLEN key 長度 strlen foo ==> 4
MSET key value[ key value...] 同時設定多個索引值 mset key1 1 key2 2 ==> OK
MGET key[ key...] 同時擷取多個索引值 mget key1 key2 ==>"1" "2"

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

hash 散列類型

散列類型是一個索引值資料結構,其值只能是字串,也就是散列資料類型不支援嵌套其他資料類型。

命令 描述 樣本
HSET key field value 設定或修改欄位值 hset user name frek ==> 1
HGET key field 擷取欄位值 hget user name ==> "frek"
HMSET key field value[ field value..] 同時設定多個欄位 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 當欄位不存在時賦值 hsetnx user name sam ==> 0 ; HSETNX user email [email protected] ==> 1
HINCRBY key field increment 參考incrby命令 hincrby user age 1 ==> 19
HKEYS key 擷取鍵中所有欄位名 hkeys user ==> "name" "age" "email"
HVALS key 擷取所有的欄位值 hvals user ==> "frek" "19" "[email protected]"
HLEN key 擷取欄位數量 hlen user ==> 3
HDEL key field[ field..] 刪除一個或多個欄位,返回刪除的欄位數 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 從列表的右側移除一個元素,並返回該元素值 rpop users ==> "nicesu"
LLEN key 返回列表元素個數,鍵不存在時返回0 llen users ==> 1
LRANGE key start stop 擷取列表片段,start和stop支援負數,-1表示右數第一個 lrange users 0 -1 ==> "sam" "alice" "carl" "lisa"
LREM key count value 刪除列表中指定的值,返回刪除的元素個數 lrem users 2 sam ==> 1
LINDEX key index 擷取指定索引元素值 lindex users 0 ==> "carl"
LSET key index value 設定指定索引的元素值 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 將一個元素從一個列錶轉移到另一個列表,對source執行rpop,對destination執行lpush,返回被移動的元素值 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 擷取集合的元素個數 scard tags ==> 2
SRANDMEMBER key[ count] 返回1個或count個隨機元素 srandmember tags ==> "one"
SDIFF key[ key..] 集合差運算  
SINTER key[ key..] 集合交集運算  
SUNION key[ key..] 集合并集運算  
有序集合類型

在集合類型的基礎上有序集合類型為每個元素都關聯了一個分數,這使我們可以使用集合類型的操作之外,還能做與分數有關的操作。

命令 描述 樣本
ZADD key score member[ score member..] 增加一個帶分數的元素,如果已存在,則替換分數 zadd scoreboard 60 fred 89 parker 76 tony 59 nicesu ==> 4
ZSCORE key member 獲得元素分數 ZSCORE scoreboard nicesu ==> "59"
ZRANGE key start end[ WITHSCORES] 獲得排名在某個範圍內的元素,返回按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] 獲得指定分數範圍內的元素 zrangebyscore scoreboard 60 100 ==> "fred" "tony" "parker"
ZREVRANGEBYSCORE key max min[ WITHSCORES][LIMIT offset count] 獲得指定分數範圍內的元素,降序排序 zrevrangebyscore scoreboard 100 60 ==> "parker" "tony" "fred"
ZINCREBY key increment member 增加某個元素的分數 zincrby scoreboard 1 nicesu ==> 60
ZCARD key 擷取集合中元素個數 zcard scoreboard ==> 4
ZCOUNT KEY min max 獲得指定分數範圍內的元素個數 zcount scoreboard 80 100 ==> 1
ZREM key member[ member..] 刪除一個或多個元素 zrem scoreboard nicesu ==> 1
ZRANK key member 擷取分數從小到大排序的位置 zrank scoreboard parker ==> 2
ZREVRANK key member 同上 zrevrank scoreboard parker ==> 0
ZREMRANGEBYRANK key start stop 按照排名範圍刪除元素  
ZREMRANGEBYSCORE key min max 按分數範圍內刪除元素  
redis與node.js安裝:

npm install redis
還可以安裝C語言寫的redis庫
npm install hiredis redis
如果安裝了hiredis,node_redis會預設調用hiredis提供的庫

樣本:
    var redis = require("redis"),    // redis.createClient(port, host, option)    client = redis.createClient(6379, ‘127.0.0.1‘, {auth_pass: ‘password‘});    // 如果需要切換資料庫,如下操作    // 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可以多參數的命令,參數可以使用數組的方式傳:
client.mset(key1, val1, ... keyn, valn, [callback]);
等價於
client.mset([key1, val1, ... keyn, valn], [callback]);

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



文/Elson(簡書作者)
原文連結:http://www.jianshu.com/p/bd3550784bce
著作權歸作者所有,轉載請聯絡作者獲得授權,並標註“簡書作者”。

redis入門

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.