封装php redis缓存操作类
封装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缓存操作类的更多相关文章
- 3.NetDh框架之缓存操作类和二次开发模式简单设计(附源码和示例代码)
前言 NetDh框架适用于C/S.B/S的服务端框架,可用于项目开发和学习.目前包含以下四个模块 1.数据库操作层封装Dapper,支持多种数据库类型.多库实例,简单强大: 此部分具体说明可参考博客: ...
- c# 封装的文件夹操作类之复制文件夹
c# 封装的文件夹操作类之复制文件夹 一.复制文件夹原理: 1.递归遍历文件夹 2.复制文件 二.FolderHelper.cs /// <summary> /// 文件夹操作类 /// ...
- 简单的redis缓存操作(get、put)
简单的redis缓存操作(get.put) 本文介绍简单的redis缓存操作,包括引入jedisjar包.配置redis.RedisDao需要的一些工具.向redis中放数据(put).从redis中 ...
- php redis数据库操作类
<?php namespace iphp\db; use iphp\App; /** * redis操作类 * 说明,任何为false的串,存在redis中都是空串. * 只有在key不存在时, ...
- C#封装的VSTO Excel操作类
自己在用的Excel操作类,因为经常在工作中要操作Excel文件,可是使用vba实现起来实在是不方便,而且编写也很困难,拼接一个字符串都看的眼花. 这个时候C#出现了,发现使用C#来操作Excel非常 ...
- C# 缓存操作类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- redis缓存工具类
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis ...
- redis缓存工具类,提供序列化接口
1.序列化工具类 package com.qicheshetuan.backend.util; import java.io.ByteArrayInputStream; import java.io. ...
- ServiceStack V3 版本 免费 redis的操作类
Referencing v3 packages in New Projects If you want a new project to use ServiceStack's v3 packages ...
随机推荐
- [日常] Go语言圣经-示例: 并发的目录遍历习题
练习 8.9: 编写一个du工具,每隔一段时间将root目录下的目录大小计算并显示出来. package main import ( // "filepath" "fla ...
- leetcode916
单词子集 我们给出两个单词数组 A 和 B.每个单词都是一串小写字母. 现在,如果 b 中的每个字母都出现在 a 中,包括重复出现的字母,那么称单词 b是单词 a 的子集. 例如,“wrr” 是 “w ...
- spring boot aop 报错
1.控制台报错 Pointcut is not well-formed: expecting 'name pattern' at character position 33 execution(com ...
- 使用commons-pool2实现FTP连接池
GitHub : https://github.com/jayknoxqu/ftp-pool 一. 连接池概述 频繁的建立和关闭连接,会极大的降低系统的性能,而连接池会在初始化的时候会创建一定 ...
- 深入理解 Java Object
Java中的Object对象为所有对象的直接或间接父对象,里面定义的几个方法容易被忽略却非常重要.以下来自Effective Java 对Object中几个关键方法的应用说明. public clas ...
- oracle配置数据库可恢复性(认证系列总结一)
原创作品,转载请注明出处:https://www.cnblogs.com/sunshine5683/p/10263246.html 接下来的n多天,将进入oracle认证系列的学习总结中,本该从asm ...
- 阿里数据源Druid配置详情
<bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-m ...
- NIO学习笔记五:Buffer 的使用
Java NIO中的Buffer用于和NIO通道进行交互.数据是从通道读入缓冲区,从缓冲区写入到通道中. 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被包装成NIO Buffe ...
- POJ3693(SummerTrainingDay10-J 后缀数组)
Maximum repetition substring Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10241 Ac ...
- vue中prop传值时加不加v-bind(冒号:)
前言:有关Vue中父组件通过prop传值给子组件时,是否加v-bind的问题,没弄清楚时感觉很乱,弄清楚之后很简单. 由于结果记起来很容易,所以先给出结果: 只有传递字符串常量时,不采用v-bind形 ...