程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> redis基礎入門

redis基礎入門

編輯:DB2教程

redis基礎入門


:感覺介紹的淺顯易懂,所以推薦

What is Redis?

Redis是 Salvatore Sanfilippo 開發的,開源的,高效的基於內存的鍵值緩存服務,所謂的NoSQL數據庫 。它可以存儲 strings, hashes, lists, sets, sorted sets等結構的數據。
鍵值存儲的實質是能夠存儲數據,而且在之後調用具體的鍵名,可以檢索出之前插入的數據。

Usage of Redis

Salvatore Sanfilippo (creator of Redis) 說Redis 能夠被用於替代RDBMS數據庫,現在想想,盡管沒有什麼是不可能的,但是它仍然是一個欠妥的想法。因為Redis在數據的事務操作,以及主從服務的數據同步上還不是很完善。
以下是Redis使用的地方,盡管還有好多地方可以用到:
有跟 memcached一樣的緩存功能,並且支持各種數據結構。豐富的存儲方式會省去好多Array的拼接,提高性能
Leaderboards or related problems.
Counting stuff.
Real time analysis.
Deletion and filtering.
在你的首頁顯示最新的項目

Aim of this Article

文章並不是去展示給你 Redis的語法知識 , 而是在PHP中怎麼去使用Redis

Install Redis

Redis很容易去安裝,包括Windows和Linux

Install Redis on 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.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved