Redis簡易入門教程

436630-41d60a9cc51a685f.png

Redis入門

簡介

Remote Dictionary Server (Redis)
Redis是一個開源的高性能鍵值對數據庫。它經過提供多種鍵值數據類型來適應不一樣場景下的存儲需求,並藉助許多高層級的接口使其能夠勝任如緩存、隊列系統等不一樣的角色。 node

它跟memcached相似,不過數據能夠持久化,並且支持的數據類型很豐富。git

截止到2015年6月27日,發佈的最新穩定版本是3.0.2。
3.0版本最大的提高就是redis集羣,一個分佈式的redis示例具備數據自動分片和高容錯性,以及在高負載的狀況下的速度提高。github

安裝、配置

安裝

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

安裝命令
$ 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
裏面包含不少默認配置
使用配置能夠這樣:$ redis-server /etc/redis/6379.conf數據庫

daemonize 若是須要在後臺運行,把該項改成yes

pidfile 配置多個pid的地址,默認在/var/run/redis.pid

bind 綁定ip,設置後只接受自該ip的請求

port 監聽端口,默認爲6379

timeout 設置客戶端鏈接時的超時時間,單位爲秒

loglevel 分爲4級,debug、verbose、notice、warning

logfile 配置log文件地址

databases 設置數據庫的個數,默認使用的數據庫爲0

save   設置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/8kr3HUwnpm

數據結構及其使用場景

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 散列類型

散列類型是一個鍵值數據結構,其值只能是字符串,也就是散列數據類型不支持嵌套其餘數據類型。app

命令 描述 示例
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 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 獲取字段數量 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 得到指定分數範圍內的元素 zrangebyscore scoreboard 60 100 ==> "fred" "tony" "parker"
ZREVRANGEBYSCORE key max min WITHSCORES 得到指定分數範圍內的元素,降序排序 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])

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

相關文章
相關標籤/搜索