文章並不是去展示給你 Redis的語法知識 , 而是在PHP中怎麼去使用Redis
Redis很容易去安裝,包括Windows和Linux
安裝Redis:
$ wget http://download.redis.io/releases/redis-2.8.19.tar.gz
$ tar xzf redis-2.8.19.tar.gz
$ cd redis-2.8.19
$ make
Note: 2.8.19 請替換成最新版本
Redis的服務啟動都位於安裝目錄下src目錄下,包括redis-cli, 用於Redis的客戶端操作,下面是啟動Redis服務。
$ src/redis-server
Install on Windows
暫不介紹
Install Predis a Redis Client for PHP
Predis 是Redis的一個客戶端. 它被社區支持,GitHub上直接下載就可以,下圖安裝了GitHub客戶端或者Git軟件,進行下載
$ git clone git://github.com/nrk/predis.git
Connecting to Redis
首先,我們 require Redis 的自動加載函數. 之後使用try語句塊包裹。以下是連接本地以及遠程服務的地址,在虛擬機中安裝的服務,請按照遠程的配置進行。host使用ifconfig查看,默認的端口是6379.
"tcp",
"host" => "153.202.124.2",
"port" => 6379
));
*/
}
catch (Exception $e) {
die($e->getMessage());
}
現在我們已經成功的連接了Redis服務器,馬上開始學習
Redis Datatypes
Redis使用了豐富的數據類型,可以幫助開發者存儲更有意義的數據結構,或者說更接近真實的數據,讓檢索變得更加高效。下面是Redis支持的數據類型:
String: 字符串,類似於memcache
List: 類似於一維數組。 可以使用 push, pop, shift and unshift等方法
Hash: Map用於存儲多個鍵值對。
Set: 無序的,不重復的
Sorted Set: 有序的,不重復的。你一定想知道它怎麼能有序: 在存儲的時候需要指定一個score值,用於排序,從最小到最大,而且可以相等。
Getters and Setters
在Redis中,最重要的命令可能屬 SET, GET and EXISTS. 這些命令用於去從Redis服務器存儲,獲取,檢查。Redis的操作就跟命令要表達的字面意思是一樣的。
set(';message';, ';Hello world';);
// gets the value of message
$value = $redis->get('message');
// Hello world
print($value);
echo ($redis->exists('message')) ? "Oui" : "please populate the message key";
Increments and Decrements
INCR and DECR 命令被用於去增加或減少值
set("counter", 0);
$redis->incr("counter"); // 1
$redis->incr("counter"); // 2
$redis->decr("counter"); // 1
當然,你也可以指定增加的具體值,使用 INCRBY and DECRBY命令
set("counter", 0);
$redis->incrby("counter", 15); // 15
$redis->incrby("counter", 5); // 20
$redis->decrby("counter", 10); // 10
Working with Lists
這裡還有基本的一些命令
LPUSH: 插入數據到list的開頭
RPUSH: 插入數據到list的末尾
LPOP: 移除list開頭的元素並返回該元素
RPOP: 移除list末尾的元素並返回該元素
LLEN: 獲得list的長度
LRANGE: 獲得list中所有的元素
Simple List Usage:
rpush("languages", "french"); // [french]
$redis->rpush("languages", "arabic"); // [french, arabic]
$redis->lpush("languages", "english"); // [english, french, arabic]
$redis->lpush("languages", "swedish"); // [swedish, english, french, arabic]
$redis->lpop("languages"); // [english, french, arabic]
$redis->rpop("languages"); // [english, french]
$redis->llen("languages"); // 2
$redis->lrange("languages", 0, -1); // returns all elements
$redis->lrange("languages", 0, 1); // [english, french]
Working with Hashes
hash 是一了鍵值對的集合,類似於一對多的關系.常用的命令有:
HSET: 設置一個key-value值
HGET: 獲取hash中key的值
HGETALL: 返回hash中所有的值
HMSET: 設置hash多個值
HDEL: 從hash中刪除一個值
HINCRBY: 給hash中元素增加一個指定值
hset($key, 'age';, 44);
$redis->hset($key, 'country';, ';finland';);
$redis->hset($key, 'occupation', 'software engineer');
$redis->hset($key, 'reknown', 'linux kernel');
$redis->hset($key, 'to delete', 'i will be deleted');
$redis->hget($key, 'age'); // 44
$redis->hget($key, 'country')); // Finland
$redis->del($key, 'to delete');
$redis->hincrby($key, 'age', 20); // 64
$redis->hmset($key, [
'age' => 44,
'country' => 'finland',
'occupation' => 'software engineer',
'reknown' => 'linux kernel',
]);
// finally
$data = $redis->hgetall($key);
print_r($data); // returns all key-value that belongs to the hash
/*
[
'age' => 44,
'country' => 'finland',
'occupation' => 'software engineer',
'reknown' => 'linux kernel',
]
*/
Working with Sets
set相關的命令:
SADD: 給set增加N個成員,數組或者單個元素
SREM: 從數組中移除單個或者一個成員
SISMEMBER: 判斷成員是否存在
SMEMBERS: 獲取set中所有成員
sadd($key, ';china';);
$redis->sadd($key, ['england', 'france', 'germany']);
$redis->sadd($key, 'china'); // this entry is ignored
$redis->srem($key, ['england', 'china']);
$redis->sismember($key, 'england'); // false
$redis->smembers($key); // ['france', 'germany']
Set Expiry and Persistence
因為Resia在內存中存儲,你可能並不像永久存儲,就比如我之前的介紹Node創建session的文章. 這裡可以設置過期的方法有 EXPIRE, EXPIREAT, TTL, PERSIST –
EXPIRE: 以秒為單位,設置過期時間
EXPIREAT: 過多久之後被刪除,以秒為單位
TTL:距離過期還剩多少時間
PERSIST:讓一個鍵永久保存
$key = "expire in 1 hour";
$redis->expire($key, 3600); // expires in 1 hour
$redis->expireat($key, time() + 3600); // expires in 1 hour
sleep(600); // don't try this, just an illustration for time spent
$redis->ttl($key); // 3000, ergo expires in 50 minutes
$redis->persist($key); // this will never expire.
CONCLUSION
後悔中......花了30分鐘,翻譯了這麼一篇沒水平的文章,也不知道自己是怎麼想的。越想越不對,但是既然翻譯了,就翻譯完了,裡面可能有翻譯的不對的地方,或者代碼錯誤的地方,那都不是問題,掠過就可以。
Future of Redis
Redis is a better replacement for memcached, as it is faster, scales better (supports master-slave replication), supports datatypes that many (Facebook, Twitter, Instagram) have dropped memcached for Redis. Redis is open source and many brilliant programmers from the open-source community have contributed patches.