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

相关文章

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送