本篇為基礎篇
Redis的使用場景想必大家多多少少都了解一些了。比如新浪的首頁那么多模塊,那么多文章,如果讀數據庫是不是壓力特別大,反應是不是特別慢?但是為什么新浪為什么能很快的響應頁面?其中一部分功勞就是靠的Reids的緩存技術。相比較Memcached筆者還是更喜歡Redis一點。
下面簡單的分析一下,歡迎拍磚!
-
Redis不僅僅支持簡單的k/v類型的數據,同時還提供list,set,hash等數據結構的存儲。
-
Redis支持數據的備份,即master-slave模式的數據備份。
-
Redis支持數據的持久化,可以將內存中的數據保持在磁盤中,重啟的時候可以再次加載進行使用。
Laravel中 使用的Redis
Redis 是一款開源且先進的鍵值對數據庫。由於它可用的鍵包含了字符串、哈希、列表、集合 和 有序集合,因此常被稱作數據結構服務器。在使用 Redis 之前,你必須通過 Composer 安裝 predis/predis 擴展包(~1.0)。
安裝predis組件
composer require "predis/predis:~1.0"
配置 應用程序的 Redis 設置都在 config/database.php 配置文件中。在這個文件里,你可以看到 redis 數組里面包含了應用程序使用的 Redis 服務器:
'redis' => [
'cluster' => false,
'default' => [
'host' => '127.0.0.1',
'port' => 6379,
'database' => 0,
],
],
默認的服務器配置對於開發來說應該足夠了。然而,你也可以根據使用的環境來隨意更改數組。只需給每個 Redis 指定名稱以及在服務器中使用的 host 和 port 即可。
基本使用方法
STRING類型 - 寫入字符串類型的redis
class PhotoController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
$key = 'STRING:TEST';
$value = 'Hello-World';
// 寫入一個字符串類型的redis
$info = \Redis::Set($key,$value);
dd($info);
return view('test');
}
}
-
頁面響應 
-
讀取相應的字符串
class PhotoController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
$key = 'STRING:TEST';
// 讀取一個字符串類型的redis
$info = \Redis::get($key);
dd($info);
return view('test');
}
}
- 頁面響應 
和redis語法同樣的 字串也有incr和decr等遞增、遞減...
LIST類型
- 寫入隊列
class PhotoController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
$key = 'LIST:TEST:R';
$names = ['PHP','HTML','CSS','JavaScript','Node','Java','Ruby','Python'];
// 從右往左壓入隊列
$info = \Redis::rpush($key,$names);
dd($info);
return view('test');
}
}
-
頁面響應 (寫入的數量) 
-
寫入隊列
class PhotoController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
$key = 'LIST:TEST:R';
$names = ['PHP','HTML','CSS','JavaScript','Node','Java','Ruby','Python'];
// 獲取隊列內容(0到-1 所有 0到0是一位 0到1是兩位)
$info = \Redis::lrange($key,0,-1);
dd($info);
return view('test');
}
}
-
頁面響應 (數組) 
-
從左往右塞入隊列 連貫方法
class PhotoController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
$key = 'LIST:TEST:L';
$names = ['PHP','HTML','CSS','JavaScript','Node','Java','Ruby','Python'];
// 從左往右存數據
\Redis::lpush($key,$names);
// 取出數據
$info = \Redis::lrange($key,0,-1);
dd($info);
return view('test');
}
}
- 頁面響應 (數組 是不是正好和上面的相反?) 
HASH類型
- 存數據
class PhotoController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
$key = 'HASH:TEST';
$names = ['id'=>'99',
'name'=>'AXiBa',
'age'=>'23',
'tel'=>'13995578699',
'addtime'=>'1231231233'];
// 將數據寫入hash
$info = \Redis::hMset($key,$names);
dd($info);
return view('test');
}
}
-
頁面響應 
-
取數據(取所有)
class PhotoController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
$key = 'HASH:TEST';
$names = ['id'=>'99',
'name'=>'AXiBa',
'age'=>'23',
'tel'=>'13995578699',
'addtime'=>'1231231233'];
// 取出hash里的數據
$info = \Redis::hGetall($key);
dd($info);
return view('test');
}
}
-
頁面響應 
-
取數據(取個別字段)
class PhotoController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
$key = 'HASH:TEST';
$names = ['id'=>'99',
'name'=>'AXiBa',
'age'=>'23',
'tel'=>'13995578699',
'addtime'=>'1231231233'];
// 取出hash里的 某一個字段的數據
$info = \Redis::hGet($key,'name');
dd($info);
return view('test');
}
}
- 頁面響應 
// 判斷這個redis key是否存在
\Redis::exists($key);
SET類型
- 寫入一個無序集合(數據插入無順序)
class PhotoController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
$key = 'SET:TEST';
$value = ['a','b','c','d','e'];
$info = \Redis::sadd($key,$value);
$info = \Redis::smembers($key);
dd($info);
return view('test');
}
}
-
頁面響應 
-
求兩個集合的交集
class PhotoController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
$key = 'SET:TEST';
$key1 = 'SET:TEST:1';
$value = ['a','b','c','d','e'];
$value1 = ['a','b','c','1','2'];
// 寫入另一個集合
\Redis::sadd($key1,$value1);
// 交集
$info = \Redis::sinter($key,$key1);
dd($info);
return view('test');
}
}
-
頁面響應 
-
求兩個集合的並集
class PhotoController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
$key = 'SET:TEST';
$key1 = 'SET:TEST:1';
$value = ['a','b','c','d','e'];
$value1 = ['a','b','c','1','2'];
// 並集
$info = \Redis::sunion($key,$key1);
dd($info);
return view('test');
}
}
-
頁面響應 
-
求兩個集合的差集
class PhotoController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
$key = 'SET:TEST';
$key1 = 'SET:TEST:1';
$value = ['a','b','c','d','e'];
$value1 = ['a','b','c','1','2'];
// 差集
$info = \Redis::sdiff($key,$key1);
dd($info);
return view('test');
}
}
哪個key在前,就以哪個key的值為基准。。
- 頁面響應 
當然了,這里只是一些最基本的Redis緩存demo,其實他的強大遠遠不止這些,操作也不止這些,比如隊列里的彈出,比如集合與集合之間的復雜關系運用...如何將非關系型的Redis運用成關系型數據庫那樣??Redis的一些實用場景又是那一些??敬請查看下一篇--"Redis 三部曲之第二部 Redis 基本的數據隔離"。
[原文地址](http://www.blog8090.com/)
