php数据加锁redis php redis锁( 二 )


复制代码
数据库代码 db.php
复制代码
?php
class Database{
static $instance;
static $db;
staticfunction getInstance(){
if(self::$instance){
return self::$instance;
}else{
return newDatabase();
}
}
public function __construct(){
self::$db = new PDO('mysql:host=localhost;dbname=session', 'root','');
}
publicfunction 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 = https://www.04ip.com/post/Database::getInstance();
//var_dump($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 = https://www.04ip.com/post/$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 怎么给redis加查询锁能不能加锁这个不知道 , 但是可以用监控watch 和事务结合起来用 。因为watch的功能就是当它监控一个键的时候,如果这个键被修改了,那么它后面的事务就不会执行 。
比如:
set key 1;
watch key
set key 2
mulit
set key 3
exec
get key='2'//key在watch后被修改了,所以后面的事务没有执行
PHP中SESSION的问题Session 和 Cookie 有什么关系
Cookie 也是由于 HTTP 无状态的特点而产生的技术 。也被用于保存访问者的身份标示和一些数据 。每次客户端发起 HTTP 请求时,会将 Cookie 数据加到 HTTP header 中,提交给服务端 。这样服务端就可以根据 Cookie 的内容知道访问者的信息了 。可以说 , Session 和 Cookie 做着相似的事情 , 只是 Session 是将数据保存在服务端,通过客户端提交来的 session_id 来获取对应的数据;而 Cookie 是将数据保存在客户端,每次发起请求时将数据提交给服务端的 。
上面提到,session_id 可以通过 URL 或 cookie 来传递 , 由于 URL 的方式比 cookie 的方式更加不安全且使用不方便,所以一般是采用 cookie 来传递 session_id 。
服务端生成 session_id,通过 HTTP 报文发送给客户端(比如浏览器),客户端收到后按指示创建保存着 session_id 的 cookie 。cookie 是以 key/value 形式保存的 , 看上去大概就这个样子的:PHPSESSID=e4tqo2ajfbqqia9prm8t83b1f2 。在 PHP 中,保存 session_id 的 cookie 名称默认叫作 PHPSESSID , 这个名称可以通过 php.ini 中 session.name 来修改,也可以通过函数 session_name() 来修改 。

推荐阅读