redis Q&A

redis 是什麼?

  • 基於內存
  • 有客戶端和服務器端
  • NoSQL非關係型數據庫

redis 應用場景是什麼?

  • 緩存
  • 隊列
  • 數據持久存儲

redis 如何安裝?如何啓動?如何關閉?客戶端如何啓動?

  • 下載、解壓、編譯、安裝

wget http://download.redis.io/releases/redis-4.0.1.tar.gz
tar -xzvf redis-4.0.1.tar.gz
cd redis-4.0.1
make
cd src
make install PREFIX=/usr/local/redisphp

  • redis 服務啓動

cd /usr/local/redis/bin
./redis-server
注意這種方式啓動redis 使用的是默認配置git

經過啓動參數告訴redis使用指定配置文件使用下面命令啓動
./redis-server redis.confgithub

  • redis 服務關閉

cd /usr/local/redis/bin
./redis-cli shutdown
./redis-cli -h 127.0.0.1 -p 6379 shutdown #指定端口和主機redis

  • redis 客戶端啓動

cd /usr/local/redis/bin
./redis-cli
退出客戶端 : quit數據庫

如何建立一個Shell腳原本管理redis服務?如何讓redis服務能自啓動?

  • 建立Shell腳本開啓、關閉、重啓redis服務
REDIS_SERVER="/usr/local/redis/bin/redis-server"
REDIS_CONF="/usr/local/redis/etc/redis.conf"
REDIS_CLIENT="/usr/local/redis/bin/redis-cli"

start()
{
  $REDIS_SERVER $REDIS_CONF
}

stop()
{
  $REDIS_CLIENT shutdown
}

restart()
{
  stop
  start
}

case "$1" in
  'start')
     start;;
  'stop')
     stop;;
  'restart')
     restart;;
  *)
     echo 'nothing to do';;
esac
  • 添加服務做爲自啓動

如何調整 redis.conf 配置?

  • 設置爲後臺啓動: daemonize yes

五種經常使用數據結構

  • String

key-value結構,key是字符串,value可存儲 字符串整數浮點數數組

  • List

key-value結構,可是value是個數組,裏面存儲的值能夠重複,但有序緩存

  • Hash

key-value結構,可是value是個數組,裏面存儲的值也是key-value結構,key是惟一的安全

圖片描述

  • Set

key-value結構,與List很類似,value也是個數組,裏面存儲的值不能重複,但無序服務器

  • Sorted set

key-value結構,可是value是個數組,裏面存儲的值是score-value-rank結構,rank是隱藏值(由redis自動維護),value是惟一的,只能夠修改score數據結構

圖片描述

PHP如何安裝redis擴展?

  • 下載 phpredis 插件

wget https://codeload.github.com/phpredis/phpredis/tar.gz/3.1.4

  • 使用phpize工具生成configure文件

php安裝目錄/bin/phpize

  • 生成Makefile文件

./configure --with-php-config=/usr/local/php/bin/php-config

  • 編譯並安裝

make && make install

  • php.ini中加載redis.so文件

extension = redis.so

使用 phpredis 擴展如何操做 redis ?

注意phpredis的類都是在根命名空間下,因此使用phpredis類時,儘可能在開頭加/

  • 鏈接
$redis = new \Redis();
$redis -> connect('127.0.0.1', 6379);
  • 操做String
$redis -> set('key1', 'val1');
$val = $redis -> get('key1'); // 'val1'
$redis -> set('key1', 12);
$redis -> incr('key1', 2);
$val = $redis -> get('key1'); // '14'
  • 操做List
$redis = new \Redis();
$redis -> connect('127.0.0.1', 6379);
$redis -> delete('list1');

$redis -> lPush('list1', 'a');
$redis -> lPush('list1', 'b');
$redis -> lPush('list1', 'c');

$val = $redis -> rPop('list1');
  • 操做Set
$redis = new \Redis();
$redis -> connect('127.0.0.1', 6379);
$redis -> delete('set1');

$redis -> sAdd('set1', 'a');
$redis -> sAdd('set1', 'b');
$redis -> sAdd('set1', 'c');
$redis -> sAdd('set1', 'c');

$len = $redis -> sCard('set1');
var_dump($len);  //int(3)

$arr = $redis -> sMembers('set1');
var_dump($arr); //無序的索引數組
  • 操做Hash
$redis = new \Redis();
$redis -> connect('127.0.0.1', 6379);
$redis -> delete('person1');

$redis -> hSet('person1', 'name', 'mingming');
$redis -> hSet('person1', 'age', 42);
$redis -> hSet('person1', 'gender', 1);

$name = $redis -> hGet('person1', 'name');
var_dump($name);  //string(8) 'mingming'

$arr = $redis -> hMGet('person1', array('name','age'));
var_dump($arr);  //關聯數組
  • 操做sort set
$redis = new \Redis();
$redis -> connect('127.0.0.1', 6379);
$redis -> delete('zset1');

$redis -> zAdd('zset1', 100, 'mingming');
$redis -> zAdd('zset1', 90, 'xiaohong');
$redis -> zAdd('zset1', 98, 'xiaoming');

$val = $redis -> zRange('zset1', 0, -1);  //低到高
$val = $redis -> zRevRange('zset1', 0, -1);  //高到低
##輸出的$val是索引數組

redis 數據持久化

因爲redis是基於內存來存儲數據的,因此redis一旦重啓或者系統崩潰,內存中的數據就會丟失,爲了保證數據安全,因此須要把數據持久化存儲到硬盤
若是僅僅當作緩存來使用,能夠禁用redis持久化功能

  • redis提供兩種持久化方法
一、快照持久化(默認開啓,無需配置):數據安全性低,性能好
二、AOF持久化(須要配置):數據安全性高,性能差
  • 快照持久化適用場景

只使用於那些即便丟失一部分數據也不會形成問題的應用程序

  • AOF持久化適用場景

用於對數據安全性要求高的應用程序

  • AOF持久化三種同步策略
appendfsync always 每次寫操做就進行同步(安全性最高)
appendfsync everysec 每秒執行一次同步(推薦)
appendfsync no 操做系統決定什麼時候同步
相關文章
相關標籤/搜索