當前位置:首頁 » 編程語言 » redisphpsession

redisphpsession

發布時間: 2022-07-13 07:41:46

php redis 什麼時候用

默認情況下,Redis
服務會提供
16
資料庫,PHPHub
使用
0
號資料庫來做緩存,1
號資料庫來做會話存儲
-
Laravel
下配置
Redis
讓緩存、Session
各自使用不同的
Redis
資料庫_PHPHub
隊列的話使用
Beanstalkd
最常用的就是緩存、隊列,當然還有很多其它的,如歸並計算、去重等。
我根據自己使用Redis的場景及個人最佳實踐,整理了一篇文章,redis應用場景與最佳實踐
比如網站搶購時,可以使用redis做隊列,可以使用redis來代替session功能,還有可以拿redis中的無序集合做socket的客戶端id存儲。

② 微信小程序 php後端使用redis代替session 請求時怎麼處理

因為小程序不支持cook,所以不能直接使用後台語言的session,需要手動搭建session,比如用webcache,或者redis替代session,小程序第一次訪問或者登錄的時候隨機分配一個唯一標識,下次請求伺服器一定要把標識帶上,伺服器用這個標識可以查詢當前用戶信息

③ thinkphp redis存入session怎麼調用

1.在配置項中定義:

'SESSION_TYPE'=>'Redis',//session保存類型
'SESSION_PREFIX'=>'sess_',//session前綴
'REDIS_HOST'=>'127.0.0.1'//REDIS伺服器地址
'REDIS_PORT'=>6379,//REDIS連接埠號
'SESSION_EXPIRE'=>3600,//SESSION過期時間

2.在目錄下新建Redis.class.php文件

文件內容如下:

<?php
namespaceThinkSessionDriver;
classRedis{
//Redis連接對象
private$redis;
//Session過期時間
private$expire;
/**
*打開方法
*@paramtype$path
*@paramtype$name
*@returntype
*/
publicfunctionopen($path,$name){
$this->expire=C('SESSION_EXPIRE')?C('SESSION_EXPIRE'):ini_get('session.gc_maxLifetime');
$this->redis=newRedis();
return$this->redis->connect(C('REDIS_HOST'),C('REDIS_PORT'));
}
/**
*關閉
*@returntype
*/
publicfunctionclose(){
return$this->redis->close();
}
/**
*讀取
*@paramstring$id
*@returntype
*/
publicfunctionread($id){
$id=C('SESSION_PREFIX').$id;
$data=$this->redis->get($id);
return$data?$data:'';
}
/**
*寫入
*@paramstring$id
*@paramtype$data
*@returntype
*/
publicfunctionwrite($id,$data){
$id=C('SESSION_PREFIX').$id;
return$this->redis->set($id,$data,$this->expire);
}
/**
*銷毀
*@paramstring$id
*/
publicfunctiondestroy($id){
$id=C('SESSION_PREFIX').$id;
$this->redis->delete($id);
}
/**
*垃圾回收
*@paramtype$maxLifeTime
*@returnboolean
*/
publicfunctiongc($maxLifeTime){
returntrue;
}
}

memcached的方法和Redis差不多一樣!

④ php 用redis儲存session(修改PHP配置文件的),是哪種方式鏈接redis的

我的習慣是直接修改php.ini
session.save_handler = redis
session.save_path = "tcp://host1:6379?weight=1, tcp://host2:6379?weight=2&timeout=2.5, tcp://host3:6379?weight=2&persistent=1"

weight 伺服器權重
persistent 持久性(整數,應該是1或0)

timeout 超時時長

⑤ 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'];

⑥ PHP實現負載均衡session共享redis緩存操作示例

本文實例講述了PHP實現負載均衡session共享redis緩存操作。分享給大家供大家參考,具體如下:
1、首先先創建html表單頁面
<meta
chatset='utf-8'>
<center>
<form
action="se.php"
method="post">
<table>
<tr>
<td>帳號:</td>
<td><input
type="text"
name="username"></td>
</tr>
<tr>
<td>密碼:</td>
<td><input
type="password"
name="pwd"></td>
</tr>
<tr>
<td></td>
<td><input
type="submit"
value="登錄"></td>
</tr>
</table>
</form>
</center>
2、創建接受表單的文件
<?php
header('content-type:text/html;charset=utf-8');
set_time_limit(10);
ini_set("session.save_handler",'redis');//開啟php.ini中的redis配置
ini_set("session.save_path","tcp://192.168.1.70:6379");//第一台伺服器的redis
session_start();//開啟session
$username
=
$_POST['username'];
$_SESSION['username']
=
$username;
echo
"<script>alert('登錄成功!');location.href='from.php'</script>";//登錄成功後跳轉到歡迎登錄頁面
?>
3、跳轉到from.php去判斷第一台伺服器的redis中的session是否存到了本台伺服器的session中
<?php
header('content-type:text/html;charset=utf-8');
set_time_limit(10);
ini_set("session.save_handler",'redis');//開啟php.ini中的redis配置
ini_set("session.save_path","tcp://192.168.1.70:6379");//第一台伺服器的redis
session_start();//開啟session
$username
=
isset($_SESSION['username'])
?
$_SESSION['username']
:
'';//判斷當前是否存在session
//$id
=
$_SESSION['PHPSESSID'];
//echo
$id;
if(empty($username)){
echo
"<script>alert('請重新登錄!');location.href='index.php'</script>";
}else{
echo
"歡迎".$username."登錄";
}
?>
這樣就簡單了實現了redis
session共享的功能,要測試的話需要兩台伺服器,建議使用linux
比較好用
linux上安裝redis可參考《Linux平台安裝redis及redis擴展的方法》
更多關於PHP相關內容感興趣的讀者可查看本站專題:《php緩存技術總結》、《PHP數組(Array)操作技巧大全》、《php字元串(string)用法總結》、《PHP錯誤與異常處理方法總結》、《php面向對象程序設計入門教程》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧匯總》
希望本文所述對大家PHP程序設計有所幫助。
您可能感興趣的文章:Nginx
安裝筆記(含PHP支持、虛擬主機、反向代理負載均衡)PHP開發負載均衡指南PHP實現負載均衡下的session共用功能Thinkphp結合AJAX長輪詢實現PC與APP推送詳解PHP經典演算法集錦【經典收藏】php
分庫分表hash演算法php的hash演算法介紹PHP中對各種加密演算法、Hash演算法的速度測試對比代碼PHP實現的一致性Hash演算法詳解【分布式演算法】PHP實現負載均衡的加權輪詢方法分析

⑦ php 怎麼把session寫入redis

一、 安裝phpredis擴展
php連接redis需要安裝phpredis擴展。
下載地址:https://github.com/phpredis/phpredis/releases,選用相應版本。
筆者用的是php5.6.29,下載了phpredis-3.0.0安裝出了問題,於是換成phpredis-2.2.8,正常。
# tar zxvf phpredis-2.2.8.tar.gz && cd phpredis-2.2.8
# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config
# make && make install
正常情況下會提示在下面目錄下生成redis.so文件
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/
# sed -i '$aextension="redis.so"' /usr/local/php/etc/php.ini
# service httpd restart
驗證:
# php -i | grep redis | grep -xq redis && echo ok || echo "phpredis extended failure"
二、 配置php連接redis(筆者使用的阿里雲redis)
# sed -i 's/session.save_handler.*/session.save_handler = redis/' /usr/local/php/etc/php.ini
# sed -i '/session.save_handler/asession.save_path ="tcp://xxxx.rds.aliyuncs.com?auth=redis密碼"' /usr/local/php/etc/php.ini
# service httpd restart

⑧ php將session存入redis伺服器中,是否一直存在,何時會被清除

redis是存在內存中的,重啟就會清掉

熱點內容
電腦顯示連接伺服器錯誤 發布:2025-02-02 09:24:10 瀏覽:529
瑞芯微開發板編譯 發布:2025-02-02 09:22:54 瀏覽:139
linux虛擬機用gcc編譯時顯示錯誤 發布:2025-02-02 09:14:01 瀏覽:226
java駝峰 發布:2025-02-02 09:13:26 瀏覽:644
魔獸腳本怎麼用 發布:2025-02-02 09:10:28 瀏覽:526
linuxadobe 發布:2025-02-02 09:09:43 瀏覽:205
sql2000資料庫連接 發布:2025-02-02 09:09:43 瀏覽:720
加密狗硬體克隆 發布:2025-02-02 08:59:16 瀏覽:462
simulink編譯後沒有代碼 發布:2025-02-02 08:59:16 瀏覽:691
c不支持的存儲類別 發布:2025-02-02 08:55:05 瀏覽:104