tp5拓展redis操作模型RedisModel

2024-05-15 20:58

本文主要是介绍tp5拓展redis操作模型RedisModel,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

php中的redis操作接口

 

 

thinkphp5

<?php
namespace app\common\Model;use think\Db;
use think\Model;class RedisModel extends Model{protected static $redis = null;protected static function init(){self::$redis = new \Redis();$config = config( 'redis.' );self::$redis->connect( $config['host'], $config['port'] );}/*********************hash操作 start***********************//*** 根据查询条件,将查询结果写入redis缓存* @author liwuming* @date   2019-04-26*/public function mysql_to_hash($key_name = '', $table = '', $fields = '*', $where = [], $order = [], $field = 'id'){$result = 0;if(!empty( $table ) && !empty( $key_name )){$tables = is_object( $table ) ? $table : Db::name( $table );$data_list = $tables->field( $fields )->where( $where )->order( $order )->select()->toArray();if(empty( $data_list ))return $result;if(!empty( $data_list ) && array_key_exists( $field, $data_list[0] )){$key_name .= config( '__LXMALL_ID__' );$result = 0;foreach( $data_list as $data_info ){$tmp = self::$redis->hset( $key_name, $data_info[$field], json_encode( $data_info ) );if($tmp){$result ++;}}}}return $result;}/*** 将数组以hash的方式存入缓存* @author liwuming* @date   2019-04-27*/public function array_to_hash($key_name = '', $data_list = [], $field = 'id'){$result = 0;if(!empty( $key_name ) && !empty( $data_list )){$key_name .= config( '__LXMALL_ID__' );if(!empty( $field )){$data_first = reset( $data_list );if(!empty( $data_first[$field] )){foreach( $data_list as $data ){$tmp = self::$redis->hset( $key_name, $data[$field], json_encode( $data ) );if($tmp){$result ++;}}}}else{foreach( $data_list as $key => $data ){$data = is_array( $data ) ? json_encode( $data ) : $data;$tmp = self::$redis->hset( $key_name, $key, $data );if($tmp){$result ++;}}}}return $result;}/*** 将单条记录以hash的方式写入缓存* @author liwuming* @date   2019-04-27*/public function set_redis_hash($key_name = '', $key = '', $data = ''){if(!empty( $key_name ) && !empty( $key ) && !empty( $data )){$key_name .= config( '__LXMALL_ID__' );$data = is_array( $data ) ? json_encode( $data ) : $data;$result = self::$redis->hset( $key_name, $key, $data );}else{$result = false;}return $result;}/*** 根据key_name和key获取所有键值对或者指定键值对* @author liwuming* @date   2019-04-27*/public function get_redis_hash($key_name = '', $item = '', $is_array = false, $field = ''){$result = false;if(!empty( $key_name )){// 首先根据key-name判断散列的键值对数量$key_name .= config( '__LXMALL_ID__' );if(!empty( $item )){$data = self::$redis->hget( $key_name, $item );if(!empty( $data )){if(!empty( $is_array )){$data = json_decode( $data, true );if(!empty( $field ) && array_key_exists( $field, $data )){$result = $data[$field];}else{$result = $data;}}else{$result = $data;}}}else{$key_list = self::$redis->hkeys( $key_name );if(!empty( $key_list )){$result = [];if(empty($is_array)){foreach( $key_list as $key_info ){$shop_info = self::$redis->hget( $key_name, $key_info );$result[$key_info] = $shop_info;}}else{foreach( $key_list as $key_info ){$shop_info = self::$redis->hget( $key_name, $key_info );$data = json_decode( $shop_info, true );$result[$key_info] = $data;}}}}}return $result;}/*** 根据key_name获取hash包含的所有键* @author liwuming* @date   2019-04-27*/public function redis_hash_keys($key_name = ''){$result = false;if(!empty( $key_name )){$key_name .= config( '__LXMALL_ID__' );$result = self::$redis->hkeys( $key_name );}return $result;}/*** 根据key_name获取hash包含的所有值* @author liwuming* @date   2019-04-27*/public function redis_hash_values($key_name = ''){$result = false;if(!empty( $key_name )){$key_name .= config( '__LXMALL_ID__' );$result = self::$redis->hvals( $key_name );}return $result;}/*** 根据key_name获取hash包含的键值对的数量* @author liwuming* @date   2019-04-27*/public function redis_hash_length($key_name = ''){$result = false;if(!empty( $key_name )){$key_name .= config( '__LXMALL_ID__' );$result = self::$redis->hlen( $key_name );}return $result;}/*** 更新redis hash表下单个键名对应json值* Created by PhpStorm.* @Author zhangzhaoyaun* Date:   2019/4/4 14:03*/public function updateRidesHash($redisname, $hashkey, $field = '*', $post){$json = get_redis_hash( $redisname, $hashkey );if($json){$data = json_decode( $json, true );if($field == '*'){foreach( $post as $key => $value ){$data[$key] = $post[$key];}}else{$fieldarr = explode( ',', $field );foreach( $fieldarr as $key => $value ){isset( $post[$value] ) && $data[$value] = $post[$value];}}$json = json_encode( $data, JSON_UNESCAPED_UNICODE );}else{$json = json_encode( $post, JSON_UNESCAPED_UNICODE );}put_redis_hash( $redisname, $hashkey, $json );}/*** 根据key_name和key删除指定的hash缓存* @author liwuming* @date   2019-04-27*/public function del_redis_hash($key_name = '', $item = ''){$result = 0;if(!empty( $key_name )){$key_name .= config( '__LXMALL_ID__' );if(! is_array( $item )){$item = [ $item ];}foreach( $item as $tmp_item ){$tmp = self::$redis->hdel( $key_name, $tmp_item );if($tmp){$result ++;}}}return $result;}/*********************hash操作 end************************//*********************list操作 start***********************//*** 根据where条件将查询结果以list形式写入缓存* @author liwuming* @params [];* @date   2019-04-27*/public function mysql_to_list($key_name = '', $table = '', $fields = '*', $where = [], $order = ['id' => 'desc'], $field = 'id', $unique = true, $type = 'l'){$result = 0;try{if(!empty( $key_name ) && !empty( $table )){$tables = is_object( $table ) ? $table : Db::name( $table );$data_list = $tables->field( $fields )->where( $where )->order( $order )->select()->toArray();if(!empty( $data_list )){$tmp_key_name = $key_name;$key_name .= config( '__LXMALL_ID__' );// 定义操作$operate = !empty( $type ) && strtolower( $type ) == 'r' ? 'LPUSH' : 'RPUSH';if(!empty( $unique )){if(!empty( $field ) && array_key_exists( $field, $data_list[0] )){$value_list = $this->get_redis_list( $tmp_key_name, 0 );foreach( $data_list as $data_info ){if(empty( $value_list ) || (!empty( $value_list ) && ! in_array( $data_info[$field], $value_list ))){$tmp = self::$redis->$operate( $key_name, $data_info[$field] );if(!empty( $tmp )){$value_list[] = $data_info[$field];$result ++;}}}}else{foreach( $data_list as $data_info ){$tmp = self::$redis->$operate( $key_name, json_encode( $data_info ) );if($tmp){$result ++;}}}}else{if(!empty( $field ) && array_key_exists( $field, $data_list[0] )){foreach( $data_list as $data_info ){$tmp = self::$redis->$operate( $key_name, $data_info[$field] );if($tmp){$result ++;}}}else{foreach( $data_list as $data_info ){$tmp = self::$redis->$operate( $key_name, json_encode( $data_info ) );if($tmp){$result ++;}}}}}}return $result;}catch( \Exception $e ){echo 121;die;p( $e->getMessage() );}}/*** 将数组中的数据信息以list形式写入缓存* @author liwuming* @date   2019-04-27*/public function array_to_list($key_name = '', $data_list = [], $type = 'l', $field = ''){$result = 0;if(!empty( $key_name ) && !empty( $data_list ) && is_array( $data_list )){$key_name .= config( '__LXMALL_ID__' );// 定义操作$operate = $type == 'l' ? 'lPush' : 'Rpush';if(!empty( $field )){foreach( $data_list as $data_info ){if(is_array( $data_info ) && array_key_exists( $field, $data_info )){$tmp = self::$redis->$operate( $key_name, $data_info[$field] );if($tmp){$result ++;}}}}else{foreach( $data_list as $data_info ){$data_info = is_array( $data_info ) ? json_encode( $data_info ) : $data_info;$tmp = self::$redis->$operate( $key_name, $data_info );if($tmp){$result ++;}}}}return $result;}/*** 判断某个值在list列表中是否存在* @author liwuming* @date   2019-04-27*/public function redis_list_exists($key_name, $value = ''){$result = false;if(!empty( $key_name ) && isset( $value )){$key_name .= config( '__LXMALL_ID__' );$value_list = $this->get_redis_list( $key_name, 0 );if(empty( $value_list )){$result = 1;}else if(!empty( $value_list )){$result = in_array( $value, $value_list ) ? 0 : 1;}}return $result;}/*** 设置单个list值* @author liwuming* @date   2019-04-27*/public function set_redis_list($key_name, $value, $unique = true, $type = 'l'){$result = false;if(!empty( $key_name ) && isset( $value )){// 定义操作$operate = !empty( $type ) && strtolower( $type ) == 'r' ? 'Rpush' : 'lPush';if(is_array( $value )){$key_name .= config( '__LXMALL_ID__' );$tmp = self::$redis->$operate( $key_name, json_encode( $value ) );$result = !empty( $tmp ) ? 1 : 0;}else{if(!empty( $unique ) && $this->redis_list_exists( $key_name, $value )){$key_name .= config( '__LXMALL_ID__' );$result = self::$redis->$operate( $key_name, $value );}else if(empty( $unique )){$key_name .= config( '__LXMALL_ID__' );$tmp = self::$redis->$operate( $key_name, $value );$result = !empty( $tmp ) ? 1 : 0;}}}return $result;}/*** 根据key_name获取列表从start偏移量到end偏移量范围内的所有元素* @author liwuming* @date   2019-04-27*/public function get_redis_list($key_name = '', $evp = 10, $page = 1, $is_array = false){$result = false;if(!empty( $key_name )){if(!empty( $evp ) && !empty( $page )){$length = $this->redis_list_length( $key_name );$start = ($page - 1) * $evp;$end = $start + $evp - 1;if($end > $length)$end = $length;if($start < $length && $length){$key_name .= config( '__LXMALL_ID__' );if(empty( $params['is_array'] )){$result = self::$redis->lrange( $key_name, $start, $end );}else{$tmp_data_list = self::$redis->lrange( $key_name, $start, $end );foreach( $tmp_data_list as $tmp_data ){$result[] = json_decode( $tmp_data, true );}}}else if(empty( $length )){$result = [];}else{$result = [];}}else if(empty( $evp )){$key_name .= config( '__LXMALL_ID__' );$result = self::$redis->lrange( $key_name, 0, - 1 );}}return $result;}/*** 根据key_name对列表进行修剪* @author liwuming* @date   2019-04-27*/public function redis_list_trim($key_name, $start = 0, $end = -1){$result = 0;if(!empty( $key_name )){$key_name .= config( '__LXMALL_ID__' );$result = self::$redis->ltrim( $key_name, $start, $end );}return $result;}/*** 根据key_name获取列表中元素的个数* @author liwuming* @date   2019-04-27*/public function redis_list_length($key_name){$result = 0;if(!empty( $key_name )){$key_name .= config( '__LXMALL_ID__' );$result = self::$redis->llen( $key_name );}return $result;}/*** 根据key_name从列表中删除第一个,或者最后一个元素* @author liwuming* @date   2019-04-27*/public function del_redis_list($key_name, $type = 'r'){$result = 0;if(!empty( $key_name )){$key_name .= config( '__LXMALL_ID__' );if($type == 'l'){$result = self::$redis->lpop( $key_name );}else{$result = self::$redis->rpop( $key_name );}}return $result;}/*** 根据value从列表中删除元素* @author liwuming* @date   2019-04-27*/public function remove_redis_list($key_name, $value, $count = 0){$result = 0;if(!empty( $key_name ) && isset( $value )){$key_name .= config( '__LXMALL_ID__' );$result = self::$redis->lrem( $key_name, $value, $count );}return $result;}/*********************list操作 end************************//*********************set操作 start***********************//*** 根据where条件将查询结果以set形式写入缓存* @author liwuming* @date   2019-04-27*/public function mysql_to_set($table, $fields = '*', $where = [], $order = [], $field = 'id', $key_name = ''){$result = 0;if(!empty( $table ) && !empty( $key_name )){$tables = is_object( $table ) ? $table : Db::name( $table );$data_list = $tables->field( $fields )->where( $where )->order( $order )->select();if(!empty( $data_list ) && array_key_exists( $field, $data_list[0] )){$key_name .= config( '__LXMALL_ID__' );foreach( $data_list as $data ){$tmp = self::$redis->sadd( $key_name, $data[$field] );if($tmp){$result ++;}}}}return $result;}/*** 将数组或者单个值,以set形式写入缓存* @author liwuming* @date   2019-04-27*/public function array_to_set($key_name, $item){$result = 0;if(!empty( $item )){$key_name .= config( '__LXMALL_ID__' );if(! is_array( $item )){$item = [ $item ];}foreach( $item as $tmp_item ){$tmp = self::$redis->sadd( $key_name, $tmp_item );if($tmp){$result = $result + 1;}}}return $result;}/*** 返回集合key_name包含的所有元素* @author liwuming* @date   2019-04-27*/public function get_redis_set($key_name){$key_name .= config( '__LXMALL_ID__' );$result = self::$redis->smembers( $key_name );return $result;}/*** 检查元素$item是否存在于集合$key_name中* @author liwuming* @date   2019-04-27*/public function redis_set_exists($key_name, $item){$key_name .= config( '__LXMALL_ID__' );$result = self::$redis->sismember( $key_name, $item );return $result;}/*** 从集合key_name里面删除一个或多个元素,并返回被移除元素的数量* @author liwuming* @date   2019-04-27*/public function redis_set_del($key_name, $item){$result = 0;if(!empty( $key_name )){$key_name .= config( '__LXMALL_ID__' );if(!empty( $item )){$items = is_array( $item ) ? $item : [ $item ];}else{$items = self::$redis->smembers( $key_name );}if(!empty( $items )){foreach( $items as $tmp_item ){$tmp = self::$redis->srem( $key_name, $tmp_item );if($tmp){$result ++;}}}}return $result;}//public function redis_del($key_name){if(!empty( $key_name )){$key_name .= config( '__LXMALL_ID__' );$items = self::$redis->delete( $key_name );}return $items;}/*********************set操作 end************************///redis操作字符串public function get($key_name = ''){$result = 0;if(!empty( $key_name )){$key_name .= config( '__LXMALL_ID__' );$result = self::$redis->get( $key_name );return $result;}}//设置键的过期时间public function pexpireat($key_name='',$timestamp = 0){$key_name .= config( '__LXMALL_ID__' );self::$redis->expireat($key_name,$timestamp);}/*** 删除一个redis的key都是用del方法, 不管是string,hash,list,set等类型, 都一样* @author liwuming* @date   2019-04-27*/public function del_redis_data($key_name = ''){$result = 0;if(!empty( $key_name )){$key_name .= config( '__LXMALL_ID__' );$result = self::$redis->del( $key_name );}return $result;}public function del_key($key_name = ''){$result = 0;if(!empty( $key_name )){//$all_keys = self::$redis->keys( $key_name );$key_name .= config( '__LXMALL_ID__' );$result = self::$redis->del( $key_name );}return $result;}/*** 获取redis中的所有key值* @author liwuming* @date   2019-04-27*/public function get_redis_keys(){$result = self::$redis->keys( '*' );return $result;}/*** 根据键key删除指定的数据* @author  liwuming* @date    2019-04-27*/public function delete($key_name = '',$is_multi = false){$result = 0;if(!empty( $key_name )){if(empty($is_multi)){$key_name .= config( '__LXMALL_ID__' );}else{$key_name = self::$redis->keys($key_name);}$result = self::$redis->del( $key_name );}return $result;}/*** 清空redis* @author  liwuming* @date    2019-04-27*/public function redis_clear(){$result = self::$redis->flushdb();return $result;}public function get_all_redis($key_name){$key_name .= config( '__LXMALL_ID__' );$result = self::$redis->lrange( $key_name, 0, - 1 );return $result;}
}

 

 

 

这篇关于tp5拓展redis操作模型RedisModel的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/992902

相关文章

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

Python使用DrissionPage中ChromiumPage进行自动化网页操作

《Python使用DrissionPage中ChromiumPage进行自动化网页操作》DrissionPage作为一款轻量级且功能强大的浏览器自动化库,为开发者提供了丰富的功能支持,本文将使用Dri... 目录前言一、ChromiumPage基础操作1.初始化Drission 和 ChromiumPage

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

redis+lua实现分布式限流的示例

《redis+lua实现分布式限流的示例》本文主要介绍了redis+lua实现分布式限流的示例,可以实现复杂的限流逻辑,如滑动窗口限流,并且避免了多步操作导致的并发问题,具有一定的参考价值,感兴趣的可... 目录为什么使用Redis+Lua实现分布式限流使用ZSET也可以实现限流,为什么选择lua的方式实现