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

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

AI Toolkit + H100 GPU,一小时内微调最新热门文生图模型 FLUX

上个月,FLUX 席卷了互联网,这并非没有原因。他们声称优于 DALLE 3、Ideogram 和 Stable Diffusion 3 等模型,而这一点已被证明是有依据的。随着越来越多的流行图像生成工具(如 Stable Diffusion Web UI Forge 和 ComyUI)开始支持这些模型,FLUX 在 Stable Diffusion 领域的扩展将会持续下去。 自 FLU