很多站长朋友们都不太清楚php操作redis存值,今天小编就来给大家整理php操作redis存值,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 php使用Redis保存数据表中所有数据, 这样子设计合不合理 2、 请问在PHP中,如何将一个多维数组存储到redis中 3、 php怎么将数据导入redis 4、 redis 如何存一个PHP数组?代码怎么写呢? 5、 thinkphp如何使用redis 有简单的示例代码吗 php使用Redis保存数据表中所有数据, 这样子设计合不合理这样是不合理的。redis只是为了快。你把所有数据表都,存到readyis里面,可能不好存,而且需要整合一下才可以存进去,它的结构是noSQL的,和MySQL不一样的。
请问在PHP中,如何将一个多维数组存储到redis中// 数组到json或者可以使用序列化函数
$val = json_encode($arr);
$redis->set("key", $val);
// 取出来反序列化
$val = $redis->get("key");
$arr = json_decode($val, true);
也可以用 serialize unserialize 替代
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_dump($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_dump($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_module_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_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 = $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 如何存一个PHP数组?代码怎么写呢?Redis->hmset($key, $value);
$value值是一个二维数组,可以对数组进行单个键值操作!
Redis->hgetall($key);
取出整个数组内容
Redis->hget($key,$index);
取出数组的$index下标
thinkphp如何使用redis 有简单的示例代码吗$redis = new \think\cache\driver\Redis();//实例化Think的Redis驱动
$redis->has('键名');//判断redis值是否存在
$redis->get('键名');//获取redis的某个值;
$redis->set('键名','键值');//设置redis值
$redis->inc('键名',进长[默认为1]);//自增缓存。只对数字整型有效
$redis->dec('键名',进长[默认为1]);//自减缓存。只对数字整型有效
$redis->rm('键名');//删除缓存
$redis->clear();//清空缓存
关于php操作redis存值的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。
查看更多关于php操作redis存值 php redis数据类型的详细内容...