Redis開發學習

Redis 簡介

Redis 是徹底開源免費的,遵照BSD協議,是一個高性能的key-value數據庫。
Redis 與其餘 key - value 緩存產品有如下三個特色:php

  • Redis支持數據的持久化,能夠將內存中的數據保持在磁盤中,重啓的時候能夠再次加載進行使用。html

  • Redis不只僅支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。java

  • Redis支持數據的備份,即master-slave模式的數據備份。python

Redis 優點

  1. 性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。mysql

  2. 豐富的數據類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據類型操做。ios

  3. 原子 – Redis的全部操做都是原子性的,同時Redis還支持對幾個操做全並後的原子性執行。laravel

  4. 豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過時等等特性。c++

Redis與其餘key-value存儲有什麼不一樣?

Redis有着更爲複雜的數據結構而且提供對他們的原子性操做,這是一個不一樣於其餘數據庫的進化路徑。Redis的數據類型都是基於基本數據結構的同時對程序員透明,無需進行額外的抽象。git

Redis運行在內存中可是能夠持久化到磁盤,因此在對不一樣數據集進行高速讀寫時須要權衡內存,應爲數據量不能大於硬件內存。在內存數據庫方面的另外一個優勢是, 相比在磁盤上相同的複雜的數據結構,在內存中操做起來很是簡單,這樣Redis能夠作不少內部複雜性很強的事情。 同時,在磁盤格式方面他們是緊湊的以追加的方式產生的,由於他們並不須要進行隨機訪問。程序員

安裝Redis

1.在MacOSX下,用curl命令先下載redis:

$ curl -O http://download.redis.io/releases/redis-2.8.17.tar.gz

redis下載

若是是Linux系統,可用wget命令下載:

$ wget http://download.redis.io/releases/redis-2.8.17.tar.gz

2.解壓並安裝

$ tar xzf redis-2.8.17.tar.gz
$ cd redis-2.8.17
$ make

make完後 redis-2.8.17目錄下會出現編譯後的redis服務程序redis-server,還有用於測試客戶端程序redis-cli,兩個程序位於安裝目錄 src 目錄下:

3.啓動redis服務

$ cd src
$ ./redis-server

若是看到下面的圖,表示redis安裝成功了^_^

圖片描述

注意上面的方式啓動redis 使用的是默認配置。也能夠經過啓動參數告訴redis使用指定配置文件使用下面命令啓動。

$ cd src
$ ./redis-server redis.conf

redis.conf是一個默認的配置文件。咱們能夠根據須要使用本身的配置文件。

啓動redis服務進程後,就可使用測試客戶端程序redis-cli和redis服務交互了, 好比:

$ cd src
$ ./redis-cli
redis> set foo bar
OK
redis> get foo
"bar"

這裏能夠開一個新的命令行窗口,個人redis保存路徑:

Mac:cd /Users/mac/software/redis/redis-2.8.17
Mac:redis-2.8.17 mac$ cd src
Mac:src mac$ ./redis-cli

說明:
127.0.0.1 是本機 IP ,6379 是 redis 服務端口。如今咱們輸入 PING 命令。

127.0.0.1:6379> ping
PONG

測試:
圖片描述

Redis 配置

Redis 的配置文件位於 Redis 安裝目錄下,文件名爲 redis.conf
你能夠經過 CONFIG 命令查看或設置配置項。

Redis CONFIG 命令格式以下:

redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME

實例

redis 127.0.0.1:6379> CONFIG GET loglevel

1) "loglevel"
2) "notice"

使用 * 號獲取全部配置項:
圖片描述

編輯配置

你能夠經過修改 redis.conf 文件或使用 CONFIG set 命令來修改配置。
語法
CONFIG SET 命令基本語法:

redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE

實例

redis 127.0.0.1:6379> CONFIG SET loglevel "notice"
OK
redis 127.0.0.1:6379> CONFIG GET loglevel

1) "loglevel"
2) "notice"

Redis 數據類型

Redis支持五種數據類型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

String(字符串)

string是redis最基本的類型,你能夠理解成與Memcached如出一轍的類型,一個key對應一個value
string類型是二進制安全的。意思是redis的string能夠包含任何數據。好比jpg圖片或者序列化的對象 。
string類型是Redis最基本的數據類型,一個鍵最大能存儲512MB
示例:

redis 127.0.0.1:6379> SET name "JackChan"
OK
redis 127.0.0.1:6379> GET name
"JackChan"

在以上實例中咱們使用了 Redis 的 SETGET 命令。鍵爲 name,對應的值爲JackChan。
注意:一個鍵最大能存儲512MB。

Hash(哈希)

Redis hash 是一個鍵值對集合
Redis hash是一個string類型的field和value的映射表,hash特別適合用於存儲對象。
示例:

127.0.0.1:6379> HMSET user_id:1 name jackcheng age 25 address HongKong
OK
127.0.0.1:6379> HGETALL user_id:1
1) "name"
2) "jackcheng"
3) "age"
4) "25"
5) "address"
6) "HongKong"
127.0.0.1:6379>

以上實例中 hash 數據類型存儲了包含用戶腳本信息的用戶對象。 實例中咱們使用了 Redis HMSET, HGETALL 命令,user_id:1爲鍵值。
每一個 hash 能夠存儲 232 - 1 鍵值對(40多億)。

List(列表)

Redis 列表是簡單的字符串列表,按照插入順序排序。你能夠添加一個元素導列表的頭部(左邊)或者尾部(右邊)。
示例:

127.0.0.1:6379> lpush language php
(integer) 1
127.0.0.1:6379> lpush language c
(integer) 2
127.0.0.1:6379> lpush language java
(integer) 3
127.0.0.1:6379> lpush language python
(integer) 4
127.0.0.1:6379> lrange language 0 5
1) "python"
2) "java"
3) "c"
4) "php"
127.0.0.1:6379>

l ->list 列表 push 推入隊列
列表最多可存儲 232 - 1 元素 (4294967295, 每一個列表可存儲40多億)。

Set(集合)

Redis的Set是string類型的無序集合。
集合是經過哈希表實現的,因此添加,刪除,查找的複雜度都是O(1)。
sadd 命令
添加一個string元素到,key對應的set集合中,成功返回1,若是元素以及在集合中返回0,key對應的set不存在返回錯誤。

sadd key member

示例:

127.0.0.1:6379> sadd pragmmer c++
(integer) 1
127.0.0.1:6379> sadd pragmmer oc
(integer) 1
127.0.0.1:6379> sadd pragmmer oc
(integer) 0
127.0.0.1:6379> smembers pragmmer
1) "c++"
2) "oc"
127.0.0.1:6379>

注意:以上實例中 oc 添加了兩次,但根據集合內元素的惟一性,第二次插入的元素將被忽略。
集合中最大的成員數爲 232 - 1 (4294967295, 每一個集合可存儲40多億個成員)。

zset(sorted set:有序集合)

Redis zset 和 set 同樣也是string類型元素的集合,且不容許重複的成員。
不一樣的是每一個元素都會關聯一個double類型的分數。redis正是經過分數來爲集合中的成員進行從小到大的排序
zset的成員是惟一的,但分數(score)卻能夠重複

zadd 命令
添加元素到集合,元素在集合中存在則更新對應score

zadd key score member

示例:

127.0.0.1:6379> zadd mytest 9 laravel
(integer) 1
127.0.0.1:6379> zadd mytest 1 php
(integer) 1
127.0.0.1:6379> zadd mytest 3 ios
(integer) 1
127.0.0.1:6379> zadd mytest 2 php
(integer) 0
127.0.0.1:6379> ZRANGEBYSCORE mytest 0 10
1) "php"
2) "ios"
3) "laravel"
127.0.0.1:6379>

圖片描述

Redis 性能測試

Redis 性能測試是經過同時執行多個命令實現的。

語法
redis 性能測試的基本命令以下:

redis-benchmark [option] [option value]

實例:
redis-benchmark在安裝目錄src裏邊,下面咱們同時執行 10000 個請求來檢測性能:
圖片描述

MacdeMacBook-Pro-3:src mac$ ./redis-benchmark -n 10000
====== PING_INLINE ======
  10000 requests completed in 0.25 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

48.44% <= 1 milliseconds
98.32% <= 2 milliseconds
99.51% <= 6 milliseconds
100.00% <= 6 milliseconds
39215.69 requests per second
...
...
====== MSET (10 keys) ======
  10000 requests completed in 0.38 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

redis 性能測試工具可選參數以下所示:
圖片描述

帶有參數的示例:

MacdeMacBook-Pro-3:src mac$ ./redis-benchmark -h 127.0.0.1 -p 6379 -t set,lpush -n 100000 -q
SET: 29904.30 requests per second
LPUSH: 25094.10 requests per second

MacdeMacBook-Pro-3:src mac$

圖片描述
以上實例中主機爲 127.0.0.1,端口號爲 6379,執行的命令爲 set,lpush,請求數爲 100000,經過 -q 參數讓結果只顯示每秒執行的請求數。

PHP 使用 Redis

安裝

開始在 PHP 中使用 Redis 前, 咱們須要確保已經安裝了 redis 服務及 PHP redis 驅動,且你的機器上能正常使用 PHP。接下來讓咱們安裝 PHP redis 驅動:下載地址爲:https://github.com/phpredis/phpredis/releases

PHP安裝redis擴展
如下操做須要在下載的 phpredis 目錄中完成:

$ curl -O https://github.com/phpredis/phpredis/archive/2.2.4.tar.gz
$ cd phpredis-2.2.7                      # 進入 phpredis 目錄
$ /usr/local/php/bin/phpize              # php安裝後的路徑
$ ./configure --with-php-config=/usr/local/php/bin/php-config
$ make && make install

圖片描述

phpredis資源

https://github.com/michael-grunder/phpredis.git

注意:這裏若是是使用的XAMPP安裝的服務器,則經過查看phpinfo的PHP版本是否一致,若是不一致,則說明當前的路徑爲Mac系統自帶的PHP版本。

查看PHP版本:

php -v

圖片描述
打印出來的是Mac系統自帶的PHP路徑,而咱們須要XAMPP安裝的PHP,則須要在/Applications/XAMPP/xamppfiles/bin路徑下找到PHPize安裝的路徑。

XAMPP的PHP版本爲5.6.14:
圖片描述

查看當前所在目錄命令 pwd
Linux中用 pwd 命令來查看」當前工做目錄「的完整路徑。pwd命令是Print Working Directory的縮寫。 簡單得說,每當你在終端進行操做時,你都會有一個當前工做目錄。

MacdeMacBook-Pro-3:bin mac$ pwd
/Applications/XAMPP/xamppfiles/bin

XAMPP的PHP安裝的phpsize就在該路徑下:

/Applications/XAMPP/xamppfiles/bin/phpize
acdeMacBook-Pro-3:phpredis mac$ ./configure --with-php-config=/Applications/XAMPP/xamppfiles/bin/php-config

圖片描述

MacdeMacBook-Pro-3:phpredis-3.0.0 mac$ sudo make && make install

出現了這樣的的錯誤
圖片描述

若是出現這樣的錯誤,則說明phpredis擴展包有問題,換一個擴展包,再重試下以前的步驟,便可安裝成功。

phpredis資源

https://github.com/michael-grunder/phpredis.git

圖片描述

Installing shared extensions:     /Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20131226/
MacdeMacBook-Pro-3:phpredis mac$

修改php.ini文件

vi /usr/local/php/lib/php.ini

增長以下內容:

extension=redis.so

若是在XAMPP集成環境的目錄下:

extension_dir = "/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20131226/"
extension=redis.so

安裝完成後重啓php-fpm 或 apache。查看phpinfo信息,就能看到redis擴展。

<?php
  echo phpinfo();
?>

圖片描述

開啓redis服務

MacdeMacBook-Pro-3:phpredis mac$ cd /Users/mac/software/redis/redis-2.8.17/src
MacdeMacBook-Pro-3:src mac$ ./redis-server

php鏈接到 redis 服務

<?php
    //鏈接本地的 Redis 服務
   $redis = new Redis();
   $redis->connect('127.0.0.1', 6379);
   echo "Connection to server sucessfully";
         //查看服務是否運行
   echo "Server is running: " . $redis->ping();
?>

執行腳本,輸出結果爲:

Connection to server sucessfully
Server is running: PONG

Redis PHP String(字符串) 實例

<?php
   //鏈接本地的 Redis 服務
   $redis = new Redis();
   $redis->connect('127.0.0.1', 6379);
   echo "Connection to server sucessfully";
   //設置 redis 字符串數據
   $redis->set("tutorial-name", "Redis tutorial");
   // 獲取存儲的數據並輸出
   echo "Stored string in redis:: " . $redis->get("tutorial-name");
?>

執行腳本,輸出結果爲:

Connection to server sucessfully
Stored string in redis:: Redis tutorial

參考博文:
Redis快速學習
【高併發簡單解決方案】redis隊列緩存 + mysql 批量入庫 + php離線整合

相關文章
相關標籤/搜索