1. 程式人生 > >Redis的安裝和基本使用筆記

Redis的安裝和基本使用筆記

1.課程介紹
1.介紹什麼是Redis;(瞭解)
2.如何安裝Redis;(掌握)
3. Redis命令操作;(掌握)
4.PHPRedis的安裝及使用(掌握)
5.Redis持久化(瞭解)

2.Redis概述(瞭解)
2.1.快取

以京東首頁商品分類為例:京東分了3級選單,總計可能有上千種商品分類.每個使用者訪問京東首頁,都需要從資料獲取所有商品分類資訊.如果每秒有一萬個使用者訪問京東首頁,就需要查詢資料庫一萬次,會對資料庫造成很大的壓力.
由於商品分類資訊是不經常變動的,我們可以使用快取技術,將商品分類資訊儲存到快取裡面.每次需要獲取分類資訊的時候,直接從快取獲取而不需要查詢資料庫,大大提高系統性能,減輕資料庫壓力.
2.2.Redis是什麼
Redis 是一個高效能的Nosql(非關係型資料庫),資料儲存在記憶體中。
Nosql 是以key-value形式儲存,和傳統的關係型資料庫不一樣。不一定遵循傳統資料庫的一些基本要求,比如說,不遵循sql標準,事務,表結構等等,非關係型資料庫嚴格上不是一種資料庫,應該是一種資料結構化儲存方法的集合。
在PHP開發中,redis更多是作為快取來使用.

2.3.Redis特點
1.資料儲存在記憶體,存取速度快,併發能力強
2.它支援儲存的value型別相對更多,包括string(字串)list(連結串列)、、set(集合)、zset(sorted set –有序集合)和hash(雜湊型別)。
3. redis的出現,很大程度補償了memcache這類key/value儲存的不足,在部分場合可以對關係資料庫(如MySQL)起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript等客戶端,使用很方便。
4.Redis支援主從同步。資料可以主伺服器向任意數量從的從伺服器上同步,從伺服器可以是關聯其他從伺服器的主伺服器。
5.支援持久化,可以將資料儲存在硬碟的檔案中
6.支援訂閱/釋出(subscribe/publish)功能
2.4.Redis的效能
下面是官方的bench-mark資料:
測試完成了50個併發執行100000個請求。
設定和獲取的值是一個256位元組字串。
Linux box是執行Linux 2.6,這是X3320 Xeon 2.5 ghz。
文字執行使用loopback介面(127.0.0.1)。
結果:讀的速度是110000次/s,寫的速度是81000次/s 。

2.5.Mysql、memcache和redis的比較

mysql   redis   memcache

型別 關係型 非關係型 非關係型
儲存位置 磁碟 磁碟和記憶體 記憶體
儲存過期 不支援 支援 支援
讀寫效能 低 非常高 非常高

2.6.Redis使用場景
1.取最新N個數據的操作(list)
2.排行榜應用,取TOP N操作
3.需要精準設定過期時間的應用
4.計數器應用
5.Uniq操作,獲取某段時間所有資料排重值
6.實時系統,反垃圾系統
7.Pub/Sub構建實時訊息系統
8.構建佇列系統
9.快取
2.7.Redis的中文手冊

http://doc.redisfans.com/

3.安裝Redis(掌握)
3.1.windows下的安裝和使用
1.下載redis程式軟體
使用redisbin32 或redisbin64
2.綠色軟體,不需要安裝,直接使用
3.啟動redis服務(帶配置檔案啟動,和不帶配置檔案啟動)

使用netstat -anb | more
如果你看到有6379 在監聽,說明ok
4.連線到redis進行操作
cmd>{%redis%}/redis-cli -h ip地址 -p 埠號
ip 預設為本地 -p 預設6379
cmd>{%redis%}/redis-cli
5.基本用法

3.2.Linux下的安裝和使用
3.2.1.Redis服務安裝
1.下載redis原始碼
wget http://download.redis.io/releases/redis-3.2.1.tar.gz
或者使用ftp上傳redis-3.2.1.tar.gz
2.安裝redis
tar xf redis-3.2.1.tar.gz //解壓
cd redis-3.2.1
//不需要配置引數 不需要執行./configure
make && make install//編譯&&安裝
3.將redis設定為系統服務
cp (redis原始碼目錄)utils/redis_init_script /etc/init.d/redis
vim /etc/init.d/redis //修改紅框處的程式碼

4.修改redis.conf配置檔案
mkdir /etc/redis //建立/etc/redis目錄
cp (redis原始碼目錄)/redis.conf /etc/redis/redis.conf
vim /etc/redis/redis.conf
//將redis配置檔案複製到redis
//設定為守護程序,以後臺方式執行
使用service redis start命令啟動redis服務.

5.將redis服務設定為開機啟動
chkconfig –-add redis
chkconfig –level 35 redis on
4.Redis操作(重點)
4.1.使用redis-cli操作redis
4.1.1.對string型別的常用操作(掌握)
set key value//將字串值value關聯到key
get key //返回key關聯的字串值

mset //同時設定一個或多個 key-value 對
mget //返回所有(一個或多個)給定 key 的值

incr key //將 key 中儲存的數字值增1(key不存在,則初始化為0,再加1)
decr key //將 key 中儲存的數字值減1(key不存在,則初始化為0,再減1)

4.1.2.對key的常用操作(掌握)
keys * //獲取所有key列表
del key //刪除key
expire key xx //設定key的過期時間(xx秒後過期)
ttl key //檢視key的過期時間(-2:過期,-1:代表永不過期)
flushall //清空整個redis伺服器資料

4.1.3.對list集合的常用操作
list集合可以看成是一個左右排列的佇列(列表)
lpush key value //將一個或多個值 value 插入到列表 key 的表頭(最左邊)
rpush key value //將一個或多個值 value 插入到列表 key 的表尾(最右邊)

lpop key //移除並返回列表 key 的頭(最左邊)元素。
rpop key //移除並返回列表 key 的尾(最右邊)元素。

lrange key start stop //返回列表 key 中指定區間內的元素
lrem key count value //根據count值移除列表key中與引數 value 相等的元素count > 0 : 從表頭開始向表尾搜尋,移除與 value 相等的元素,數量為 count 。count < 0 : 從表尾開始向表頭搜尋,移除與 value 相等的元素,數量為 count 的絕對值。count = 0 : 移除表中所有與 value 相等的值。

lindex key index //返回列表 key 中,下標為 index 的元素
ltrim key start stop //對一個列表進行修剪

4.1.4.對set集合的常用操作
set集合是一個無序的不含重複值的集合
sadd key member //將一個或多個 member 元素加入到集合 key 當中,已經存在於集合的 member 元素將被忽略
srem key member //移除集合 key 中的一個或多個 member 元素,不存在的 member 元素會被忽略
smembers key //返回集合 key 中的所有成員。

4.1.5.對SortedSet(有序集合)的操作(自行學習)

4.1.6.對hash型別的常用操作
hash型別類似於php的陣列
hset key name value//新增一個name=>value鍵值對到key這個hash型別
hget key name //獲取hash型別的name鍵對應的值
hmset key name1 value1 name2 value2 //批量新增name=>value鍵值對到key這個hash型別
hmget key name1 name2//批量獲取hash型別的鍵對應的值
hkeys key //返回雜湊表 key 中的所有鍵
hvals key //返回雜湊表 key 中的所有值
hgetall //返回雜湊表 key 中,所有的鍵和值
我們將user:1(name:zhangsan,age:18,sex:nv)的資訊儲存在hash表.

4.1.7.事務(瞭解)
multi //標記一個事務塊的開始。
exec //執行所有事務塊內的命令。

discard //取消事務,放棄執行事務塊內的所有命令。
Redis的事務在執行exec指令時,才批量執行操作,沒有回滾操作
4.1.8.訂閱/釋出(瞭解)
SUBSCRIBE channel [channel …] //訂閱給定的一個或多個頻道的資訊。
PUBLISH channel message //將資訊 message 傳送到指定的頻道 channel 。
新開一個客戶端訂閱tv頻道

釋出nihao!訊息到tv頻道

訂閱tv頻道的客戶端可以收到nihao!訊息

4.1.9.設定密碼(瞭解)
1.通過命令動態調整密碼
CONFIG SET 命令可以動態地調整 Redis 伺服器的配置而無須重啟,重啟後失效
CONFIG SET requirepass 123456 //將密碼設定為123456
CONFIG SET requirepass “” //清除密碼
AUTH 123456 //輸入密碼進行認證

2.通過配置檔案設定密碼
在配置檔案redis.conf中增加一行程式碼
requirepass 123456

將密碼123456設定到配置檔案中,redis啟動時載入該檔案,即可啟用密碼

4.2.使用php程式碼操作redis(重點)
4.2.1.Linux系統安裝Phpredis
1.下載phpredis原始碼(phpredis-2.2.8.zip)
2.解壓
unzip phpredis-2.2.8.zip -d ./
3.使用phpize配置php(phpize是用來擴充套件php擴充套件模組的,通過phpize可以建立php的外掛模組)
如果提示缺少autoconf元件,安裝autoconf-2.62.tar.gz
4.執行phpize
cd phpredis-2.2.8 //進入phpredis目錄
/usr/local/lamp/php/bin/phpize //執行phpize命令

./configure –with-php-config=/usr/local/lamp/php/bin/php-config
5.編譯安裝
make && make install
安裝完會得到redis.so檔案的路徑
( /usr/local/lamp/php/lib/php/extensions/no-debug-zts-20131226/)
6.修改php.ini檔案(通過phpinfo檢視配置檔案路徑),新增redis.so支援

extension=(得到的redis.so檔案路徑)/redis.so

7.重啟apache: service httpd restart

4.2.2.編寫php程式碼操作redis
1.redis_set.php向redis新增資料

2.redis_get.php從redis獲取已新增的資料,驗證是否正確

5.Redis持久化配置(瞭解)
Redis 提供了兩種不同級別的持久化方式:RDB和AOF,可以通過修改redis.conf來進行配置
5.1.RDB模式
RDB 持久化可以在指定的時間間隔內生成資料集的時間點快照,預設開啟該模式.
如何關閉 rdb 模式:
save “”

save 900 1 //至少在900秒的時間段內至少有一次改變儲存同步一次

save xxx

save 60 10000

5.2.AOF追加模式
AOF 持久化記錄伺服器執行的所有寫操作命令,並在伺服器啟動時,通過重新執行這些命令來還原資料集,預設關閉該模式。
如何開啟aof模式:
appendonly yes //yes 開啟,no 關閉

appendfsync always //每次有新命令時就執行一次fsync 

這裡我們啟用 everysec

appendfsync everysec //每秒 fsync 一次

appendfsync no //從不fsync(交給作業系統來處理,可能很久才執行一次fsync)

其它的引數請大家看redis.conf配置檔案詳解
5.3.兩種方式對比
兩種方式各有優缺點,可以同時開啟使用,也可以關閉持久化功能,讓資料儲存在記憶體中。

作為快取使用,通常我們使用AOF模式或關閉持久化功能

6.作業
1.Windows下練習redis命令操作(截圖儲存)
2.在linux上安裝redis軟體服務
3.在linux上安裝phpredis元件
4.Redis配置檔案修改,開啟aof模式和關閉rdb持久化模式
5.編寫php程式碼操作redis,要求實現以下所有操作(上課所學命令對應的方法都要有):
對string型別的操作
對keys的操作
對list和set的操作
對hash型別的操作

6.在linux系統完成。A)建立一個student資料表,新增一些資料。B)編寫redis.php實現:從redis讀取最新10個sutdent資料,如果資料不存在或已過期,則從資料庫讀取,並儲存到redis,並設定過期時間1分鐘。C)新增和修改學生資訊時清除redis快取。
7.完善抽獎系統