共享一个redis增删改查的操作类库
Posted 我还是一个小猿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了共享一个redis增删改查的操作类库相关的知识,希望对你有一定的参考价值。
共享一个redis增删改查的操作类库
在使用之前一定要确定服务器开启redis服务以及redis扩展
<?php
namespace rely\\cache;
use rely\\init\\Config;
/**
* Class Redis
* @package rely\\cache
* @author Mr.taochuang <mr_taochuang@163.com>
* @date 2019/7/4 14:07
* redis缓存
*/
class Redis extends Config{
/**
* @var \\Redis;
* redis实例类
*/
protected static $redis;
private static $table = ''; //数据表名
private static $where = []; //搜索指定id的数据
/**
* @param string $host
* @param string $port
* @param string $database
* @param string $prefix
* @return $this
* redis连接
*/
public function connection($host = '127.0.0.1', $port = '6379', $database= '1', $prefix = 'db'){
self::set('host',$host);
self::set('port',$port);
self::set('database',$database);
self::set('prefix',$prefix);
self::$redis = new \\Redis();
self::$redis->connect($host, $port);
self::$redis->select($database);
if(is_null(self::$redis)) throw new \\Exception('redis连接失败');
return $this;
}
/**
* @param $table
* @return $this
* 表名
*/
public function name($table)
{
self::$table = $table;
return $this;
}
/**
* @param $param
* @return $this
* 获取指定id的数据
*/
public function where($param)
{
if (is_array($param)) {
self::$where = $param;
} else {
self::$where = explode(',', $param);
}
return $this;
}
/**
* @param $data
* @return bool|int|string
* @throws \\Exception
* 添加数据
*/
public function insert(Array $data)
{
$id = self::$redis->get(self::$table)??0;
$id=$id+1;
self::$redis->set(self::$table . '_id', $id);
if (empty(self::$table)) throw new \\Exception('请配置数据表');
self::$redis->hMset(self::$table . '_' . $id, $data);
self::$redis->zAdd(self::get('prefix') . '_' . self::$table, $id, $id);
return $id;
}
/**
* @return array
* 查询所有数据
*/
public function select()
{
$data = [];
if (empty(self::$where)) {
$count = self::count();
$result = self::$redis->ZRANGE(self::get('prefix') . '_' . self::$table, 0, $count);
foreach ($result as $id) {
$data[$id] = self::$redis->hGetAll(self::$table . '_' . $id);
}
} else {
foreach (self::$where as $id) {
$data[$id] = self::$redis->hMGet(self::$table . '_' . $id, self::$where);
}
}
return $data;
}
public function ids($position,$count){
return self::$redis->ZRANGE(self::get('prefix') . '_' . self::$table, $position, $count);
}
/**
* @param int $page_num
* @param null $page
* @return array
* 分页取出redis里的值
*/
public function paginate($page_num = 15, $page = null)
{
if (is_null($page)) $page =$_REQUEST['page'];
empty($page) ? $page = 1 : true;
$start = ($page - 1) * $page_num;
$end = ($start + $page_num) - 1;
$count = self::count();
$result = self::$redis->ZRANGE(self::get('prefix') . '_' . self::$table, $start, $end);
$last_page = ceil($count / $page_num);
$data = array();
foreach ($result as $id) {
$data[$id] = self::$redis->hGetAll(self::$table . '_' . $id);
if (count(self::$where) > 0) {
$pageList[] = self::$redis->hMGet(self::$table . '_' . $id, self::$where);
} else {
$pageList[] = self::$redis->hGetAll(self::$table . '_' . $id);
}
}
return ['total' => $count, 'per_page' => $page_num, 'current_page' => $page, 'last_page' => $last_page, 'data' => $data];
}
/**
* @param $data
* @param $id
* @return mixed
* 修改指定数据
*/
public function update($data, $id)
{
self::$redis->del(self::$table . '_' . $id);
self::$redis->hMset(self::$table . '_' . $id, $data);
return $id;
}
/**
* @param $id
* @return bool
* 删除redis缓存数据
*/
public function delete($id)
{
if (!is_array($id)) $id = explode(',', $id);
foreach ($id as $maps) {
self::$redis->del(self::$table . '_' . $maps);
self::$redis->zRem(self::get('prefix') . '_' . self::$table, $maps);
}
return true;
}
/**
* @param string $field
* @return array
* 获取所有的redis key
*/
public function keys($field = '*')
{
return self::$redis->keys($field);
}
/**
* @return int
* 获取数据总条数
*/
public function count()
{
return self::$redis->zCard(self::get('prefix') . '_' . self::$table);
}
/**
* @return \\Redis
* 初始redis;
*/
public static function instance()
{
return self::$redis;
}
/*
* 清空Db表
* @return bool
*/
public function clear()
{
self::$redis->flushDB();
return true;
}
/**
* 清空所有表数据
*/
public function truncate()
{
self::$redis->flushAll();
return true;
}
}
config.php 类库
<?php
namespace rely\\init;
/**
* Class Config
* @package rely\\curl
* @author Mr.taochuang <mr_taochuang@163.com>
* @date 2019/7/3 11:25
* 配置类
*/
class Config implements \\ArrayAccess
{
/**
* @var array
* 配置信息
*/
private static $config = [];
/**
* @param $config
* 配置初始化
*/
public function __construct($config=[])
{
self::$config = array_merge(self::$config, $config);
}
/**
* @param string|null $field
* @return array
* 获取config配置参数
*/
public static function get(string $field = null)
{
if (is_null($field)) return self::$config;
return isset(self::$config[$field]) ? self::$config[$field] : null;
}
/**
* @param string $field
* @param $value
* @return $this
* 设置config参数
*/
public function set(string $field, $value)
{
self::$config[$field] = $value;
return $this;
}
/**
* @param string $field
* @return bool
* 判断config配置是否存在
*/
public static function has(string $field):bool
{
return !is_null($this->get($field));
}
/**
* 设置配置变量
* @access public
* @param string $field 参数名
* @param mixed $value 值
*/
public function __set(string $field, $value): void
{
$this->set($field, $value);
}
/**
* 获取配置变量
* @access public
* @param string $field 参数名
* @return mixed
*/
public function __get(string $field)
{
return $this->get($field);
}
/**
* @param mixed $field
* @param mixed $value
* ArrayAccess
*/
public function offsetSet($field, $value): void
{
$this->set($field, $value);
}
public function offsetExists($field): bool
{
return $this->has($field);
}
public function offsetUnset($field)
{
throw new \\Exception('not support: unset');
}
public function offsetGet($field)
{
return $this->get($field);
}
/**
* ArrayAccess
*/
}
以上是关于共享一个redis增删改查的操作类库的主要内容,如果未能解决你的问题,请参考以下文章