phpredisset
『壹』 php怎麼將數據導入redis
對於大訪問量的站點使用默認的Session 並不合適,我們可以將其存入資料庫、或者使用Redis KEY-VALUE數據存儲方案
首先新建一個session表
CREATE TABLE `sessions` (
`sid` char(40) NOT NULL,
`updatetime` int(20) NOT NULL,
`data` varchar(200) NOT NULL,
UNIQUE KEY `sid` (`sid`) USING HASH
) ENGINE=MEMORY DEFAULT CHARSET=utf8;
Mysql 的memory引擎採用內存表,所有數據存儲在內存,操作速度快
復制代碼
<?php
//引入資料庫文件
include "db.php";
class MySessionHandler implements SessionHandlerInterface
{
private $savePath;
private $sessData;
public $expiretime; //設置過期時間
public $db; //資料庫
public function __construct($hanlder =''){
$this->db = Database::getInstance();
//獲取資料庫實力
///var_mp($this->db);
}
public function open($savePath, $sessionName)
{
return true;
}
public function close()
{
return true;
}
public function read($id)
{
$sql ="select * from sessions where sid ='$id'";
$result = $this->db->execute($sql);
if(!empty($result)){
return $this->sessData = $result;
}
}
//函數的參數 $id -> 當前會話ID
//數據DATA -> 序列化之後的字元串
public function write($id, $data)
{
// echo $id;
// echo $data;
$now = time();
$newExp = $now+$this->expiretime; //總時間=當前時間 + 期限時間
$sql = "select * from sessions where sid ='$id'";
$result = $this->db->getOne($sql);
//var_mp($result);
if($data==''||isset($data)){
$data = $this->sessData;
}
if($result){
//如果存在則更新
$sql ="update sessions set updatetime = '$newExp',data ='$data' where sid = '$id'";
//echo $sql;
$update_data =$this->db->execute($sql);
if($update_data){
return true;
}
}else{
//不存在則生成生成
$sql = "insert into sessions(sid,updatetime,data) values('$id','$now','$data')";
$insert_data = $this->db->execute($sql);
if($insert_data){
return true;
}
}
return false;
}
public function destroy($id)
{ //銷毀
$sql = "delete from sessions where sid="."$id";
$destory = $this->db->execute($sql);
if($destory){
return true;
}else{
return false;
}
}
public function gc($sessMaxLifeTime)
{
$t = time();
$sql ="delete from sessions where $t - 'updatetime'>${sessMaxLifeTime}";
$data = $this->db->execute($this->tosql);
if($data){
return true;
}else{
return false;
}
return true;
}
}
復制代碼
實例化
此處 PHP 手冊可以有兩種方法
1,實現了SessionHandlerInterface借口的對象,自PHP5.4可以使用
2 ,直接使用 session_set_save_handler
復制代碼
//判斷PHP版本
if(version_compare(PHP_VERSION,5.4)==1){
session_set_save_handler($handler, true);
session_start();
}else{
ini_set('session.use_trans_sid',0);
ini_set('session.use_cookies',1);
ini_set('session.cookie_path','/');
ini_set('session.save_handler','user');
session_mole_name('user');
session_set_save_handler(array($session,"open"),array($session,"close"),array($session,"read"),array($session,"write"),array($session,"destory"),array($session,"gc"));
session_start();
}
$_SESSION['QQ']="QQ";
echo $_SESSION['QQ'];
復制代碼
資料庫代碼 db.php
復制代碼
<?php
class Database{
static $instance;
static $db;
static function getInstance(){
if(self::$instance){
return self::$instance;
}else{
return new Database();
}
}
public function __construct(){
self::$db = new PDO('mysql:host=localhost;dbname=session', 'root','');
}
public function getOne($sql){
$rs =self::$db->query($sql);
@$rs->setFetchMode(PDO::FETCH_ASSOC);//返回關聯數組
$result = $rs -> fetch();
return $result;
}
public function execute($sql){
$rs = self::$db->exec($sql);
return $rs;
}
}
//$data = Database::getInstance();
//var_mp($data);
復制代碼
使用REDIS 存儲SESSION
復制代碼
<?php
class SessionManager{
private $redis;
private $sessionSavePath;
private $sessionName;
private $sessionExpireTime = 30;
public function __construct(){
$this->redis = new Redis();
$this->redis->connect('127.0.0.1',6379); //連接redis
$retval = session_set_save_handler(
array($this,"open"),
array($this,"close"),
array($this,"read"),
array($this,"write"),
array($this,"destory"),
array($this,"gc")
);
session_start();
}
public function open($path,$name){
return true;
}
public function close(){
return true;
}
public function read($id){
$value = $this->redis->get($id);
if($value){
return $value;
}else{
return "";
}
}
public function write($id,$data){
if($this->redis->set($id,$data)){
$this->redis->expire($id,$this->sessionExpireTime);
//設置過期時間
return true;
}
return false;
}
public function destory($id){
if($this->redis->delete($id)){
return true;
}
return false;
}
public function gc($maxlifetime){
return true;
}
//析構函數
public function __destruct(){
session_write_close();
}
}
$re = new SessionManager();
$_SESSION['name'] = "qq";
echo $_SESSION['name'];
『貳』 redis中set類型怎麼刪除元素中最後插入的值,急,在線等!我用的是php
用PHP取出數據後,用程序處理完,然後再 set 進去就可以了
『叄』 redis使用php怎麼進行更新
php/redis 更新緩存的問題 [ 2.0 版本 ]
if(!$redis->exists('cache'))
{
echo '寫入緩存<br>';
$sql = "select * from user limit 0,3";
$rs = mysqli_query($connect,$sql) or die('db conn error');
while( $result = mysqli_fetch_assoc($rs) )
{
array_push($results,$result);
}
$cache = json_encode($results);
echo $cache;
$redis->set('cache',$cache,1200);
}
else
{
echo '讀取緩存<br>';
echo $redis->get('cache');
}
後台進行add/update/delete時,自動讓緩存失效。
『肆』 windows 7 php怎麼通過redis擴展使用redis
PHP 7安裝Redis擴展
1、php操作第一步就是要安裝對應的擴展。在Windows環境下則是對應的.dll文件。Windows環境下由於編譯環境不同,對應擴展在選擇的時候需要注意當前php的先關信息。可以通過phpinfo()查看。如果可以看到對應的環境,這在選擇擴展的時候有用
2、選擇對應PHP環境擴展
通過以上圖我們可以看到「VC14」和「ts」這樣的字樣,如果不明白的同學在找對應擴展的時候也一樣要找到這樣的字樣。
3、安裝PHP 7擴展
下載php_redis-20160319-ts-vc14-x64.zip之後解壓,將解壓後的php_redis.dll文件放到php\ext目錄下。然後在php.ini末尾添加extension=php_redis.dll。重啟Apache服務。再次通過phpinfo()查看,如圖表示安裝成功
測試例子
1、擴展安裝成功之後需要驗證下是否可以用。web伺服器目錄下創建文件輸入下面內容:
<?php
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
$redis->set('test','hello redis');
echo $redis->get('test');
?>
2、然後在網頁上訪問,如果有hello redis輸入則表示擴展安裝成功。
『伍』 php redis 如何解決回復功能
redis會將數據存儲在內存中,斷電丟失。這個要注意一下,如有必要就做個持久化。持久化的方法一言難盡,可以參考網上的文章。
php的redis擴展叫php-redis。網上有php-redis的中文手冊,下面給你一個示例:
<?php
$redis=newredis();
$result=$redis->connect('127.0.0.1',6379);//6379是默認埠
$result=$redis->set('9639002718',"comment");//設置鍵值
echo$result=$redis->get('9639002718');//獲取鍵值
$all=$redis->getMultiple(array('9639002718','9639002718'));//同時獲得多個鍵值
//沒有提供獲得所有鍵值的方法。下面這句我不確定是否能用,你可以試一試。
$all=$redis->getMultiple(array('*'));
望採納,謝謝支持!
『陸』 PHP 如何在Redis中實現事物(事物提交和事物
public function index()
{
$serv = new \swoole_server("0.0.0.0", 9501);
$serv->set([
'worker_num' => 1,//一般設置為伺服器CPU數的1-4倍
'task_worker_num' => 8,//task進程的數量
'daemonize' => 1,//以守護進程執行
'max_request' => 10000,//最大請求數量
"task_ipc_mode " => 2 //使用消息隊列通信,並設置為爭搶模式
]);
$serv->on('Receive', [$this, 'onReceive']);//接收任務,並投遞
$serv->on('Task', [$this, 'onTask']);//可以在這個方法裡面處理任務
$serv->on('Finish', [$this, 'onFinish']);//任務完成時候調用
$serv->start();
}
『柒』 php 使用redis set中sscan方法報錯ERR unknown command 'sccan' 求支援
Available since 2.8.0.
Time complexity: O(1) for every call. O(N) for a complete iteration, including enough command calls for the cursor to return back to 0. N is the number of elements inside the collection..
應該要2.8.0版本以後才有用。
引用:http://redis.io/commands/sscan
『捌』 php redis 怎麼讀取set
<?php
$redis=newRedis();
//*********無序集合**********//
//添加set
$redis->sadd('set1','ab');
$redis->sadd('set1','cd');
$redis->sadd('set1','ef');
//返回集合所有成員
var_mp($redis->smembers('set1'));
//返回集合隨機元素
var_mp($redis->srandmember('set1'));
//*********有序集合**********//
//添加zset
$redis->zadd('zset1',1,'ab');
$redis->zadd('zset1',2,'cd');
$redis->zadd('zset1',3,'ef');
//返回指定區間的而元素
$redis->zrange('zset1',0,1);//0和1之間的元素
//更多請查手冊
『玖』 php yii框架操作redis問題。可以獲取到redis對象信息,但是set總是報錯。
1.在配置項中定義:
12345'SESSION_TYPE' => 'Redis', //session保存類型'SESSION_PREFIX' => 'sess_', //session前綴'REDIS_HOST' => '127.0.0.1' //REDIS伺服器地址'REDIS_PORT' => 6379, //REDIS連接埠號'SESSION_EXPIRE' => 3600, //SESSION過期時間
2.在ThinkPHP\Library\Think\Session\Driver目錄下新建Redis.class.php文件
文件內容如下:
<?phpnamespace Think\Session\Driver;class Redis {// Redis連接對象 private $redis;// Session過期時間 private $expire; /** * 打開方法 * @param type $path * @param type $name * @return type */ public function open($path, $name) { $this->expire = C('SESSION_EXPIRE') ? C('SESSION_EXPIRE') : ini_get('session.gc_maxLifetime'); $this->redis = new Redis(); return $this->redis->connect(C('REDIS_HOST'), C('REDIS_PORT')); } /** * 關閉 * @return type */ public function close() { return $this->redis->close(); } /** * 讀取 * @param string $id * @return type */ public function read($id) { $id = C('SESSION_PREFIX') . $id; $data = $this->redis->get($id); return $data ? $data : ''; } /** * 寫入 * @param string $id * @param type $data * @return type */ public function write($id, $data) { $id = C('SESSION_PREFIX') . $id; return $this->redis->set($id, $data, $this->expire); } /** * 銷毀 * @param string $id */ public function destroy($id) { $id = C('SESSION_PREFIX') . $id; $this->redis->delete($id); } /** * 垃圾回收 * @param type $maxLifeTime * @return boolean */ public function gc($maxLifeTime) { return true; }}
memcached的方法和Redis差不多一樣!
『拾』 怎麼安裝redis PHP擴展,windows下
1、根據php信息,如下圖,下載合適的 phpredis.dll擴展包。下載地址: https://github.com/nicolasff/phpredis/downloads
5、phpredis hellow word 開始你的redis使用
<?php
$redis= newRedis(); //redis對象
$redis->connect("192.168.60.6","6379"); //連接redis伺服器
$redis->set("test","Hello World"); //set字元串值
echo$redis->get("test"); //獲取值
?>
感謝網友分享。