封装php redis缓存操作类,集成了连接redis并判断连接是否成功,redis数据库选择,检测redis键是否存在,获取,写入值,设置生存时间删除清空操作。

php redis类代码:

<?php
/**
* redisdrive.class.php
* php redis 操作类
**/
class redisdrive{
//键名
public $key;
//值
public $value;
//默认生存时间
public $expire = 86400; /*60*60*24*/
//连接是否成功
public $redis;
//连接redis服务器ip
public $ip = '127.0.0.1';
//端口
public $port = 6379;
//密码
private $password = null;
//数据库
public $dbindex = 0;

/**
* 自动连接到redis缓存
*/
public function __construct(){
//判断php是否支持redis扩展
if(extension_loaded('redis')){
//实例化redis
if($this->redis = new redis()){
//ping连接
if(!$this->ping()){
$this->redis = false;
}else{
//连接通后的数据库选择和密码验证操作
$this->redis -> select($this->dbindex);
$this->redis->auth($this->password);
}
}else{
$this->redis = false;
}
}else{
$this->redis = false;
}
}

/**
* ping redis 的连通性
*/
public function ping(){
if($this->redis->connect($this->ip,$this->port)){
return true;
}else{
return false;
}
}

/**
* 检测redis键是否存在
*/
public function exists(){
if($this->redis->exists($this->key)){
return true;
}else{
return false;
}
}

/**
* 获取redis键的值
*/
public function get(){
if($this->exists()){
return json_decode($this->redis->get($this->key),true);
}else{
return false;
}
}

/**
* 带生存时间写入key
*/
public function setex(){
return $this->redis->setex($this->key,$this->expire,json_encode($this->value));
}

/**
* 设置redis键值
*/
public function set(){
if($this->redis->set($this->key,json_encode($this->value))){
return $this->redis->expire($this->key,$this->expire);
}else{
return false;
}
}

/**
* 获取key生存时间
*/
public function ttl(){
return $this->redis->ttl($this->key);
}

/**
*删除key
*/
public function del(){
return $this->redis->del($this->key);
}

/**
* 清空所有数据
*/
public function flushall(){
return $this->redis->flushall();
}

/**
* 获取所有key
*/
public function keys(){
return $this->redis->keys('*');
}

}

实例化调用:

判断redis是否可用和当设置了redis session 时redis不可用转回session文件操作。当redis可用时获取指定的键值如果存在就从redis中获取数据,如果不能存在就重新从数据库获取数据再写入redis,redis不可用时直接从数据库获取操作。

//实例化
$redis = new redisdrive();
$redis = false;
//是否可用判断
if($redis->redis==false){
$redis = false;
//如果把session存入了redis则在redis不可用时把session切换回文件存储
ini_set('session.save_handler','files');
ini_set('session.save_path','/tmp');
}else{
$redis = true;
}

//redis判断和数据读取缓存操作设置
if($redis){
//设置redis键
$redis->key = 'res';
//获取redis键的值
$res_mysql = $redis->get();
//如果没获取到redis键的值得数据则从数据库获取并写入缓存
if(!$res){
//设置生存时间
$redis->expire = 60*60*6;
//设置键
$redis->key = 'res';

//数据库获取数据$res

//获取到数据$res,赋值
$redis->value = $res;
//写入到redis中
$redis->set();
}
}else{
//数据库获取数据
}

封装php redis缓存操作类的更多相关文章

  1. 3.NetDh框架之缓存操作类和二次开发模式简单设计(附源码和示例代码)

    前言 NetDh框架适用于C/S.B/S的服务端框架,可用于项目开发和学习.目前包含以下四个模块 1.数据库操作层封装Dapper,支持多种数据库类型.多库实例,简单强大: 此部分具体说明可参考博客: ...

  2. c# 封装的文件夹操作类之复制文件夹

    c#  封装的文件夹操作类之复制文件夹 一.复制文件夹原理: 1.递归遍历文件夹 2.复制文件 二.FolderHelper.cs /// <summary> /// 文件夹操作类 /// ...

  3. 简单的redis缓存操作(get、put)

    简单的redis缓存操作(get.put) 本文介绍简单的redis缓存操作,包括引入jedisjar包.配置redis.RedisDao需要的一些工具.向redis中放数据(put).从redis中 ...

  4. php redis数据库操作类

    <?php namespace iphp\db; use iphp\App; /** * redis操作类 * 说明,任何为false的串,存在redis中都是空串. * 只有在key不存在时, ...

  5. C#封装的VSTO Excel操作类

    自己在用的Excel操作类,因为经常在工作中要操作Excel文件,可是使用vba实现起来实在是不方便,而且编写也很困难,拼接一个字符串都看的眼花. 这个时候C#出现了,发现使用C#来操作Excel非常 ...

  6. C# 缓存操作类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...

  7. redis缓存工具类

    import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis ...

  8. redis缓存工具类,提供序列化接口

    1.序列化工具类 package com.qicheshetuan.backend.util; import java.io.ByteArrayInputStream; import java.io. ...

  9. ServiceStack V3 版本 免费 redis的操作类

    Referencing v3 packages in New Projects If you want a new project to use ServiceStack's v3 packages ...

随机推荐

  1. ImageButton设置src图片大小

    需求&起因 有时候没有找到合适大小的资源,需要修改图片大小而且不改变ImageButton的大小.可以通过缩放图片大小的方式改变外观. ImageView的属性android:scaleTyp ...

  2. [javaSE] 看博客学习多线程的创建方式和优劣比较和PHP多线程

    通过实现Runnable接口创建线程 获取Thread对象,new出来,构造函数参数:Runnable对象 Runnable是一个接口,定义一个类MyRunnable实现Runnable接口,实现ru ...

  3. nginx+tomcat抵御慢速连接攻击

    一.安装nginx apt-get install nginx 安装中途可能会要求填写许可,输入‘y’就好了 如果安装提示“E: Unable to locate package nginx”,那么输 ...

  4. Into outfile禁用情况下另类方法拿webshell

    首先环境如下: OS:Windows 2003 WAF:Safe Dog 4.0正式版 phpmyadmin:4.7(许多都可以) Mysql:5.5+ PHP:5.3 Apache:2.x 总结方法 ...

  5. org.springframework.web.util.NestedServletException Handler processing failed; n

    因为谷歌的lists不支持或使用, 所有要改成java的list工具 谷歌list使用: import com.google.common.collect.Lists; .... Lists.newA ...

  6. ss 重新设置 端口的方法 记录

    1. 选择 ssh 进行远程登入: ssh root@服务器ip -p 端口, 事例如:ssh root@176.122.134.96 -p 28202 2. ls 展示 当前目录下的文件,看到有 s ...

  7. easyui+webuploader+ckeditor实现插件式多图片上传

    需求:在ckeditor编辑器上实现多图片上传并要求另外单独选择ckeditor上传的图片作为封面 页面效果说明: 动态效果图: 第一步:页面布局 <html xmlns="http: ...

  8. OSGI企业应用开发(一)OSGI简介

    一.OSGI简介 OSGI全称为Open Service Gateway Initiative(开放服务网关规范),有两个层面的含义,一方面它指OSGi Alliance组织:另一方面指该组织制定的一 ...

  9. angularjs -- 页面模板清除

    前几天项目在上线过程中,出现了一些新问题.页面在切换时由于前一个页面的模板清理不及时,会造成页面的重叠.导致这个问题的原因是:页面模板缓存,即上一个页面退出时,浏览器没有及时清空上一个页面的模板,导致 ...

  10. Expo大作战(二十二)--expo分离后的部署(expokit)

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...