共享一个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增删改查的操作类库的主要内容,如果未能解决你的问题,请参考以下文章

IOS数据库FMDB增删改查的使用原创

JDBC之增删改查的代码实现

如何用SSM框架写一个增删改查的功能

sql增删改查的操作

如何用SSM框架写一个增删改查的功能

Yii2.0高级框架数据库增删改查的一些操作