当前位置: 首页 > news >正文

thinkphp6.0常用设计模式实例

单例模式 (Singleton)

场景:确保一个类只有一个实例,并提供一个全局访问点。
实际业务:数据库连接、日志记录器、配置管理等。

ThinkPHP 6.0 实现:

namespace app\common;class DatabaseConnection
{private static $instance = null;private function __construct() {}public static function getInstance(){if (self::$instance === null) {self::$instance = new self();}return self::$instance;}public function connect(){// 连接数据库return "Database connected!";}
}// 使用
$db = DatabaseConnection::getInstance();
echo $db->connect();
namespace app\lib;class Database
{private static $instance = null;private function __construct(){// 私有化构造函数,防止外部实例化}public static function getInstance(){if (self::$instance === null) {self::$instance = new self();}return self::$instance;}public function query($sql){// 执行数据库查询return "Executing: $sql";}
}// 使用
$db = Database::getInstance();
echo $db->query("SELECT * FROM users");

工厂模式 (Factory)

场景:根据不同的条件创建不同的对象。
实际业务:支付方式选择、日志记录器创建等。

namespace app\lib;class PaymentFactory
{public static function create($type){switch ($type) {case 'wechat':return new WechatPayment();case 'alipay':return new AlipayPayment();default:throw new \Exception("Unsupported payment type");}}
}class WechatPayment
{public function pay(){return "Paying with WeChat";}
}class AlipayPayment
{public function pay(){return "Paying with Alipay";}
}// 使用
$payment = PaymentFactory::create('wechat');
echo $payment->pay();

观察者模式 (Observer)

场景:当一个对象的状态发生变化时,通知依赖它的所有对象。
实际业务:订单状态变更通知、用户注册后发送邮件等。

示例代码:

namespace app\lib;class Order
{private $observers = [];public function attach($observer){$this->observers[] = $observer;}public function notify(){foreach ($this->observers as $observer) {$observer->update($this);}}public function complete(){echo "Order completed!\n";$this->notify();}
}class EmailNotifier
{public function update($order){echo "Sending email notification...\n";}
}// 使用
$order = new Order();
$order->attach(new EmailNotifier());
$order->complete();

策略模式 (Strategy)

场景:定义一系列算法,使它们可以互相替换。
实际业务:支付方式选择、折扣计算等。

示例代码:

namespace app\lib;interface DiscountStrategy
{public function calculate($price);
}class NoDiscount implements DiscountStrategy
{public function calculate($price){return $price;}
}class HalfDiscount implements DiscountStrategy
{public function calculate($price){return $price * 0.5;}
}class Order
{private $discountStrategy;public function setDiscountStrategy(DiscountStrategy $strategy){$this->discountStrategy = $strategy;}public function calculatePrice($price){return $this->discountStrategy->calculate($price);}
}// 使用
$order = new Order();
$order->setDiscountStrategy(new HalfDiscount());
echo $order->calculatePrice(100); // 输出: 50

命令模式 (Command)

场景:将请求封装为对象,使请求的发送者和接收者解耦。
实际业务:任务队列、撤销操作等。

示例代码:

namespace app\lib;interface Command
{public function execute();
}class LightOnCommand implements Command
{private $light;public function __construct($light){$this->light = $light;}public function execute(){$this->light->on();}
}class Light
{public function on(){echo "Light is on\n";}
}// 使用
$light = new Light();
$command = new LightOnCommand($light);
$command->execute();

适配器模式 (Adapter)

场景:将一个类的接口转换成客户端期望的另一个接口。
实际业务:兼容不同第三方库、接口转换等。

示例代码:

namespace app\lib;class OldLibrary
{public function specificRequest(){return "Old library response";}
}interface NewLibraryInterface
{public function request();
}class Adapter implements NewLibraryInterface
{private $oldLibrary;public function __construct(OldLibrary $oldLibrary){$this->oldLibrary = $oldLibrary;}public function request(){return $this->oldLibrary->specificRequest();}
}// 使用
$oldLibrary = new OldLibrary();
$adapter = new Adapter($oldLibrary);
echo $adapter->request();

装饰者模式 (Decorator)

场景:动态地为对象添加功能。
实际业务:日志记录、权限校验等。

示例代码:

namespace app\lib;interface Component
{public function operation();
}class ConcreteComponent implements Component
{public function operation(){return "ConcreteComponent";}
}class Decorator implements Component
{protected $component;public function __construct(Component $component){$this->component = $component;}public function operation(){return $this->component->operation();}
}class LogDecorator extends Decorator
{public function operation(){echo "Logging before operation\n";$result = parent::operation();echo "Logging after operation\n";return $result;}
}// 使用
$component = new ConcreteComponent();
$decorator = new LogDecorator($component);
echo $decorator->operation();

责任链模式 (Chain of Responsibility)

场景:将请求的发送者和接收者解耦,使多个对象都有机会处理请求。
实际业务:权限校验、日志记录等。

示例代码:

namespace app\lib;abstract class Handler
{protected $nextHandler;public function setNext(Handler $handler){$this->nextHandler = $handler;}public function handle($request){if ($this->nextHandler !== null) {return $this->nextHandler->handle($request);}return null;}
}class AuthHandler extends Handler
{public function handle($request){if ($request === 'auth') {return "AuthHandler: Handling request\n";}return parent::handle($request);}
}class LogHandler extends Handler
{public function handle($request){if ($request === 'log') {return "LogHandler: Handling request\n";}return parent::handle($request);}
}// 使用
$authHandler = new AuthHandler();
$logHandler = new LogHandler();
$authHandler->setNext($logHandler);echo $authHandler->handle('log');

访问者模式 (Visitor)

场景:将算法与对象结构分离。
实际业务:报表生成、数据导出等。

示例代码:

namespace app\lib;interface Visitor
{public function visitElementA(ElementA $element);public function visitElementB(ElementB $element);
}class ConcreteVisitor implements Visitor
{public function visitElementA(ElementA $element){echo "Visiting ElementA\n";}public function visitElementB(ElementB $element){echo "Visiting ElementB\n";}
}interface Element
{public function accept(Visitor $visitor);
}class ElementA implements Element
{public function accept(Visitor $visitor){$visitor->visitElementA($this);}
}class ElementB implements Element
{public function accept(Visitor $visitor){$visitor->visitElementB($this);}
}// 使用
$visitor = new ConcreteVisitor();
$elementA = new ElementA();
$elementB = new ElementB();$elementA->accept($visitor);
$elementB->accept($visitor);

中介者模式 (Mediator)

场景:减少对象之间的直接依赖,通过中介者进行通信。
实际业务:聊天室、事件调度等。

示例代码:

namespace app\lib;class ChatRoom
{public static function showMessage($user, $message){echo "[" . $user . "] : " . $message . "\n";}
}class User
{private $name;public function __construct($name){$this->name = $name;}public function sendMessage($message){ChatRoom::showMessage($this->name, $message);}
}// 使用
$john = new User("John");
$jane = new User("Jane");$john->sendMessage("Hi Jane!");
$jane->sendMessage("Hello John!");

备忘录模式 (Memento)

场景:捕获并外部化对象的内部状态,以便以后可以恢复。
实际业务:撤销操作、游戏存档等。

示例代码:

namespace app\lib;class Editor
{private $content;public function setContent($content){$this->content = $content;}public function getContent(){return $this->content;}public function save(){return new EditorMemento($this->content);}public function restore(EditorMemento $memento){$this->content = $memento->getContent();}
}class EditorMemento
{private $content;public function __construct($content){$this->content = $content;}public function getContent(){return $this->content;}
}// 使用
$editor = new Editor();
$editor->setContent("First content");
$saved = $editor->save();$editor->setContent("Second content");
echo $editor->getContent(); // 输出: Second content$editor->restore($saved);
echo $editor->getContent(); // 输出: First content

迭代器模式 (Iterator)

场景:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部表示。
实际业务:遍历集合、分页查询等。

示例代码:

namespace app\lib;class Book
{private $title;public function __construct($title){$this->title = $title;}public function getTitle(){return $this->title;}
}class BookList implements \Iterator
{private $books = [];private $position = 0;public function addBook(Book $book){$this->books[] = $book;}public function current(){return $this->books[$this->position];}public function next(){$this->position++;}public function key(){return $this->position;}public function valid(){return isset($this->books[$this->position]);}public function rewind(){$this->position = 0;}
}// 使用
$bookList = new BookList();
$bookList->addBook(new Book("Design Patterns"));
$bookList->addBook(new Book("Clean Code"));foreach ($bookList as $book) {echo $book->getTitle() . "\n";
}

门面模式

ThinkPHP 6.0 的门面模式依赖于容器(Container)和门面类(Facade)。门面类通过 __callStatic 方法将静态调用转发到容器中的实例。

示例代码:
以下是一个自定义门面类的实现:

namespace app\facade;use think\Facade;class MyService extends Facade
{protected static function getFacadeClass(){// 返回容器中绑定的类标识return 'my_service';}
}

绑定服务到容器:
在服务提供者中,将具体的实现类绑定到容器:

namespace app\provider;use think\Service;class MyServiceProvider extends Service
{public function register(){// 绑定服务到容器$this->app->bind('my_service', \app\service\MyService::class);}
}

具体实现类:

namespace app\service;class MyService
{public function doSomething(){return "Doing something...";}
}

使用门面类:

use app\facade\MyService;echo MyService::doSomething(); // 输出: Doing something...

ThinkPHP 6.0 内置门面类

ThinkPHP 6.0 提供了许多内置的门面类,例如:

Db:数据库操作

Cache:缓存操作

Log:日志记录

Request:请求对象

Config:配置管理

示例:使用内置门面类

use think\facade\Db;
use think\facade\Cache;
use think\facade\Log;// 数据库查询
$users = Db::table('users')->select();// 缓存操作
Cache::set('name', 'ThinkPHP');
echo Cache::get('name');// 日志记录
Log::info('This is a log message.');

门面模式的优势

简化调用:通过静态方法调用,代码更加简洁。

解耦:调用者无需关心具体的实现类,降低了耦合度。

易于扩展:可以通过绑定不同的实现类来扩展功能。

统一接口:为复杂的子系统提供一个统一的接口。

门面模式的使用场景

数据库操作:通过 Db 门面类,统一调用数据库操作方法。

缓存操作:通过 Cache 门面类,统一调用缓存操作方法。

日志记录:通过 Log 门面类,统一调用日志记录方法。

配置管理:通过 Config 门面类,统一调用配置管理方法。

自定义服务:为自定义的服务提供统一的静态调用接口。

门面模式的实现原理

ThinkPHP 6.0 的门面模式依赖于容器和 Facade 基类。以下是其核心实现原理:

Facade 基类:

namespace think;abstract class Facade
{protected static $app;public static function setFacadeApplication($app){self::$app = $app;}public static function __callStatic($method, $params){$instance = self::$app->make(static::getFacadeClass());return $instance->$method(...$params);}protected static function getFacadeClass(){throw new \RuntimeException('Facade does not implement getFacadeClass method.');}
}

关键点:
__callStatic 方法:将静态调用转发到容器中的实例。

getFacadeClass 方法:返回容器中绑定的类标识。

相关文章:

thinkphp6.0常用设计模式实例

单例模式 (Singleton) 场景:确保一个类只有一个实例,并提供一个全局访问点。 实际业务:数据库连接、日志记录器、配置管理等。 ThinkPHP 6.0 实现: namespace app\common;class DatabaseConnection {private static $instance …...

微服务保护——Sentinel

什么是微服务保护? 微服务保护是一系列用于保障微服务架构稳定、可靠运行的策略与技术手段,在复杂的分布式微服务系统里,它能避免局部故障引发连锁反应,从而维持整个系统的可用性,主要涵盖以下几个关键部分&#xff1a…...

php 多进程那点事,用 swoole 如何解决呢 ?

在 PHP 中,多进程的处理通常会遇到一些挑战,比如资源共享、进程间通信、性能优化等。Swoole 是一个高性能的协程和多进程框架,旨在为 PHP 提供异步、并发、协程等功能,解决了传统 PHP 环境中的多进程管理问题。通过使用 Swoole&am…...

STM32+ADC+DMA快速循环转换

测试平台:STM32F405RGT6 uint32_t AD_Buf[100]{0}; HAL_ADC_Start_DMA(&hadc2,(uint32_t *)AD_Buf,100); while(1) {printf("AD_Buf:%d\n",AD_Buf[0]); }...

移动电商的崛起与革新:以开源AI智能名片2+1链动模式S2B2C商城小程序为例的深度剖析

摘要:本文旨在探讨移动电商的崛起背景、特点及其对传统电商模式的革新影响,并以开源AI智能名片21链动模式S2B2C商城小程序为具体案例,深入分析其在移动电商领域的创新实践。随着移动互联网技术的飞速发展,移动电商已成为电商行业的…...

QT实现 端口扫描暂停和继续功能 3

上篇QT给端口扫描工程增加线程2-CSDN博客 为按钮pushButton_Stop添加clicked事件,功能为暂停扫描,并在暂停后显示继续按钮,点击继续按钮之后继续扫描 1.更新UI 添加继续按钮 点击转到槽则会自动声明 2. 更新 MainWindow.h 需要新增的部分…...

C_字符数组存储汉字字符串及其索引

字符串就是字符数组,可以定义一个char类型的数组来存储字符串。 如果要存储多个字符串则可以定义一个char类型的二维数组。 存储多个汉字字符串的话,可以考虑用char类型的二维数组。 不过要注意,一个汉字在内存中占用的字节数确实大于一个…...

Linux标准IOday1

1:思维导图 2:将 student.c这个练习题&#xff0c;改成链表后实现 头文件link.h #ifndef __STRUCT_H__ #define __STRUCT_H__ #include <stdio.h> #include <stdlib.h> typedef struct Student{char name[20];double math;double chinese;double english;double…...

SEO内容优化:如何通过用户需求赢得搜索引擎青睐?

在谷歌SEO优化中&#xff0c;内容一直是最重要的因素之一。但要想让内容真正发挥作用&#xff0c;关键在于满足用户需求&#xff0c;而不是简单地堆砌关键词。谷歌的算法越来越智能化&#xff0c;更注重用户体验和内容的实用性。 了解目标用户的需求。通过工具如Google Trends…...

API调用淘宝京东商品详情接口示例参考,json格式数据示例

以下是API调用淘宝和京东商品详情接口的JSON格式数据示例&#xff1a; 淘宝商品详情接口JSON数据示例 淘宝商品详情接口&#xff08;通常称为item_get或类似的名称&#xff09;是淘宝开放平台提供的一个API接口&#xff0c;允许开发者根据商品的ID&#xff08;Item ID&#x…...

css实现垂直文本

效果 知识 writing-mode: <value>; 可选值 horizontal-tb: 默认值。文本从左到右&#xff08;或从右到左&#xff09;排列&#xff0c;然后从上到下。vertical-rl: 文本从上到下排列&#xff0c;然后从右到左。适用于垂直书写的方向&#xff0c;如日语和中文。vertica…...

【AI日记】25.01.07

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 AI 参加&#xff1a;kaggle 比赛 Forecasting Sticker Sales 读书 书名&#xff1a;国家为什么会失败阅读原因&#xff1a;2024 年诺贝尔经济学奖得主的力作&#xff0c;之前我已经读过他另一…...

logback日志

一、使用两个以上spring环境变量做三目操作 <springProperty name"application_name" scope"context" source"spring.application.name"/><springProperty name"trace_app_name" scope"context" source"sprin…...

Android NDK开发入门3之基本语法

JNI语法基础 函数生成语法&#xff1a; extern “ C” 作⽤&#xff1a;避免编绎器按照C的⽅式去编绎C函数 1、C不⽀持函数的重载&#xff0c;编译之后函数名不变&#xff1b; 2、C⽀持函数的重载&#xff08;这点与Java⼀致&#xff09;&#xff0c;编译之后函数名会改变…...

unity学习9:unity的Asset 导入和导出

目录 1 Assets 资产/资源 1.1 编辑器里Assets 和explorer文件夹 里一一对应 1.2 在编辑器里操作&#xff0c;和文件夹内操作&#xff0c;多数相同还是有些不同 2 往Assets里导入零散文件 2.1 往Assets里导入零散文件 2.2 把fbx文件导入到hierarcy /scene 里&#xff0c;…...

Unity学习笔记(七)使用状态机重构角色攻击

前言 本文为Udemy课程The Ultimate Guide to Creating an RPG Game in Unity学习笔记 攻击状态重构 首先我们重构攻击状态的动画 之前的动画&#xff0c;我们是使用状态(isAttacking)攻击次数(comboCounter)完成动画的过渡&#xff0c;这样虽然能完成功能&#xff0c;但是如…...

【整理集合大全】MySQL(4) 数据库增删改查SQL语句

查看数据库 show databases; 使用数据库 use 数据库名;创建数据库 CREATE DATABASE 数据库名;删除数据库 DROP DATABASE 数据库名;创建表 create table 表名(列名1 类型(长度) [约束],列名2 类型(长度) [约束],…… );长度区别 int类型带长度&#xff1a;不影响存取值&…...

Flutter 鸿蒙化 flutter和鸿蒙next混和渲染

前言导读 这一个节课我们讲一下PlatformView的是使用 我们在实战中有可能出现了在鸿蒙next只加载一部分Flutter的情况 我们今天就讲一下这种情况具体实现要使用到我们的PlatformView 效果图 具体实现: 一、Native侧 使用 DevEco Studio工具打开 platform_view_example\oho…...

Flask返回浏览器无乱码方法

# -*- coding: utf-8 -*- from flask import Flask, request, jsonify, Response import os import json import re from datetime import datetime import logging import sys import crawling_web_knowledgeapp Flask(__name__)app.json.ensure_ascii False # 解决中文乱码…...

Tauri教程-基础篇-第二节 Tauri的核心概念下篇

“如果结果不如你所愿&#xff0c;就在尘埃落定前奋力一搏。”——《夏目友人帐》 “有些事不是看到了希望才去坚持&#xff0c;而是因为坚持才会看到希望。”——《十宗罪》 “维持现状意味着空耗你的努力和生命。”——纪伯伦 Tauri 技术教程 * 第四章 Tauri的基础教程 第二节…...

直播预告|StarRocks 3.4,打造 AI 时代的智能数据基座,应用场景全面扩展

随着新年的到来&#xff0c;StarRocks 3.4 即将上线&#xff0c;为 AI Workload 和更多应用场景提供强大支持&#xff01;此次升级聚焦于提升 AI 场景支持&#xff0c;并扩展更多应用场景&#xff0c;全方位提升数据分析体验。 更强的 AI 场景支持&#xff1a; 引入 Vector In…...

Maven的基本使用

Maven apache 旗下的开源项目&#xff0c;是一款用于管理构建Java的项目的工具 一 作用 1依赖管理&#xff1a;管理jar包&#xff0c;避免依赖冲突 2统一项目结构 &#xff1a; 3项目构建&#xff1a; 二 安装 下面是全球唯一的中央仓库 https://repo1.maven.org/maven2…...

【深度学习入门_基础篇】线性代数本质

开坑本部分主要为基础知识复习&#xff0c;新开坑中&#xff0c;学习记录自用。 学习目标&#xff1a; 熟悉向量、线性组合、线性变换、基变换、矩阵运算、逆函数、秩、列空间、零空间、范式、特征指、特征向量等含义与应用。 强烈推荐此视频&#xff1a; 【官方双语/合集】…...

数据库模型全解析:从文档存储到搜索引擎

目录 前言1. 文档存储&#xff08;Document Store&#xff09;1.1 概念与特点1.2 典型应用1.3 代表性数据库 2. 图数据库&#xff08;Graph DBMS&#xff09;2.1 概念与特点2.2 典型应用2.3 代表性数据库 3. 原生 XML 数据库&#xff08;Native XML DBMS&#xff09;3.1 概念与…...

LED背光驱动芯片RT9293应用电路

一&#xff09;简介&#xff1a; RT9293 是一款高频、异步的 Boost 升压型 LED 定电流驱动控制器&#xff0c;其工作原理如下&#xff1a; 1&#xff09;基本电路结构及原理 RT9293的主要功能为上图的Q1. Boost 电路核心原理&#xff1a;基于电感和电容的特性实现升压功能。当…...

Ubuntu挂载云盘操作步骤

1. 查看磁盘分区情况 使用 fdisk -l 命令查看当前系统中所有磁盘的分区情况&#xff0c;找到需要挂载的云盘设备&#xff0c;例如/dev/vdc。 2. 创建新分区 使用 fdisk /dev/vdc 命令对云盘进行分区操作&#xff1a; 输入n创建新分区。 输入p选择创建主分区。 输入1指定分区…...

【中间件】docker+kafka单节点部署---zookeeper模式

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言消息中间件介绍1. KRaft模式2. zookeeper模式2.1. 单节点部署安装验证 前言 最近生产环境上准备部署ELFK日志监控&#xff0c;先在测试环境部署单节点kafka验证…...

Arduino IDE刷微控制器并下载对应固件的原由

在使用Arduino IDE刷写某个微控制器时&#xff0c;下载对应的固件通常是为了确保微控制器能够正确识别和执行Arduino IDE中编写的代码。以下是对这一过程的详细解释&#xff1a; 一、固件的作用 固件是微控制器或嵌入式设备上运行的软件&#xff0c;它负责控制硬件设备的操作…...

深兰科技董事长陈海波应邀为华东师大心理学专业师生做AI专题讲座

12月28日&#xff0c;应上海华东师范大学的邀请&#xff0c;上海市科协常委、上海交通大学博士生导师、深兰科技创始人兼董事长陈海波专程到校&#xff0c;为该校心理学专业的全体师生做了一场关于人工智能推动个人数字化未来的专题讲座。 他在演讲中&#xff0c;首先详细讲述了…...

iOS - 引用计数(ARC)

1. 基本数据结构 // 对象结构 struct objc_object {isa_t isa; // isa 指针&#xff0c;包含引用计数信息 };// isa 的位域结构 union isa_t {uintptr_t bits;struct {uintptr_t nonpointer : 1; // 是否启用优化的 isa 指针uintptr_t has_assoc : 1; // 是…...

【物联网原理与运用】知识点总结(上)

目录 名词解释汇总 第一章 物联网概述 1.1物联网的基本概念及演进 1.2 物联网的内涵 1.3 物联网的特性——泛在性 1.4 物联网的基本特征与属性&#xff08;五大功能域&#xff09; 1.5 物联网的体系结构 1.6 物联网的关键技术 1.7 物联网的应用领域 第二章 感知与识别技术 2.1 …...

Flux“炼丹炉”——fluxgym安装教程

一、介绍 这个炼丹炉目前可以训练除了flux-dev之外的其它模型&#xff0c;只需更改一个配置文件内容即可。重要的是训练时不需要提前进行图片裁剪、打标等前置工作&#xff0c;只需下图的三个步骤即可开始训练。它就是——fluxgym。 fluxgym&#xff1a;用于训练具有低 VRAM &…...

【Jsoncpp】manipulating JSON data in C++

源代码 #include <iostream> // 引入输入输出流库&#xff0c;用于标准输入输出操作 #include <fstream> // 引入文件流库&#xff0c;用于文件读写操作 #include <json/json.h> // 引入JSON库&#xff0c;用于解析和操作JSON数据using namespace std; …...

Ardupilot开源无人机之Geek SDK进展2024

Ardupilot开源无人机之Geek SDK进展202501 1. 源由2. 状态3. TODO3.1 跟踪目标框3.2 onnxruntime版本3.3 CUDA 11.8版本3.4 pytorch v2.5.1版本3.5 Inference性能3.6 特定目标集Training 4. 参考资料 1. 源由 前期搭建《Ardupilot开源无人机之Geek SDK》&#xff0c;主要目的是…...

肝了半年,我整理出了这篇云计算学习路线(新手必备,从入门到精通)

大家好&#xff01;我是凯哥&#xff0c;今天给大家分享一下云计算学习路线图。这是我按照自己最开始学习云计算的时候的学习路线&#xff0c;并且结合自己从业多年所涉及的知识精心总结的云计算的思维导图。这是凯哥精心总结的&#xff0c;花费了不少精力哦&#xff0c;希望对…...

配置数据的抗辐照加固方法

SRAM 型FPGA 的配置存储器可以看成是由0 和1 组成的二维阵列&#xff0c;帧的高度为矩阵阵列的高度&#xff0c;相同结构的配置帧组成配置列&#xff0c;如CLB 列、IOB 列、输入输出互联(Input Output Interconnect,IOI)列、全局时钟(Global Clock, GCLK)列、BRAM 列和BRAM 互联…...

【linux系统之redis6】处理可视化工具无法连接服务器端的redis

redis跑在虚拟机上的linux系统是可以正常的&#xff0c;但是用宿主机的可视化工具链接就连不上 可视化工具无法连接 问题排查 确保配置文件开启了bind 0.0.0.0,允许外部任何终端的链接密码确保正确要关闭linux系统的防火墙(我的属于这种) systemctl stop firewalld.servic…...

云计算操作系统的核心-OpenStack框架全解析

文章目录 一、OpenStack简介二、OpenStack架构1.认证服务Keystone2.镜像服务Glance3.计算服务Nova4.块存储服务Clinder5.对象存储服务Swift6.网络服务Neutron7.计量服务Ceilometer 三、服务简介3.1 OpenStack界面管理3.2 Keystone 认证3.3 Glance3.3 Nova3.4 存储服务3.5 Neutr…...

【设计模式-2】23 种设计模式的分类和功能

在软件工程领域&#xff0c;设计模式是解决常见设计问题的经典方案。1994 年&#xff0c;Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides&#xff08;四人帮&#xff0c;GoF&#xff09;在《设计模式&#xff1a;可复用面向对象软件的基础》一书中系统性地总结了…...

记录一下Coding一直不能clone

配置 下载git客户端&#xff0c;进行配置 git config --list user.name姓名全称 user.emailIAM_xxxxxx.com ,这个就是你的邮箱地址 user.signingkey 注册coding平台的密码 一般不需要配置公钥私钥 下载TortoiseGit&#xff0c;配置这几个参数 配置凭据管理器 注意 这里用户名是…...

Backend - C# EF Core 执行迁移 Migrate

目录 一、创建Postgre数据库 二、安装包 &#xff08;一&#xff09;查看是否存在该安装包 &#xff08;二&#xff09;安装所需包 三、执行迁移命令 1. 作用 2. 操作位置 3. 执行&#xff08;针对visual studio&#xff09; 查看迁移功能的常用命令&#xff1a; 查看…...

检索增强生成 和思维链 结合: 如何创建检索增强思维链 (RAT)?

论文地址&#xff1a;https://arxiv.org/pdf/2403.05313 Github地址&#xff1a;https://github.com/CraftJarvis/RAT 想象一下&#xff0c;一个人工智能助手可以像莎士比亚一样写作&#xff0c;像专家一样推理。这听起来很了不起&#xff0c;对吧&#xff1f;但是&#xff0…...

第四届电子信息与通信工程国际学术会议(EICE 2025)

第四届电子信息与通信工程国际学术会议&#xff08;EICE 2025&#xff09;定于2025年1月10日至12日在中国广州举行。大会交流全球相关领域科技学术最新发展趋势&#xff0c;链接重点领域国内外顶尖、活跃、最新学术资源&#xff0c;通过经验分享和智慧碰撞&#xff0c;推动科研…...

Hbuilder ios 离线打包sdk版本4.36,HbuilderX 4.36生成打包资源 问题记录

1、打包文档地址https://nativesupport.dcloud.net.cn/AppDocs/usesdk/ios.html#%E9%85%8D%E7%BD%AE%E5%BA%94%E7%94%A8%E7%89%88%E6%9C%AC%E5%8F%B7 2、配置应用图标 如果没有appicon文件&#xff0c;此时找到 Assets.xcassets 或者 Images.xcassets(看你sdk引入的启动文件中…...

HarmonyOS开发:传参方式

一、父子组件传参 1、父传子&#xff08;Prop方式&#xff09; 父组件代码 Entry Component struct ParentComponent {State parentMessage: string Hello from Parent;build() {Column() {ChildComponent({ message: this.parentMessage });}} } 子组件代码 Component s…...

Tomcat(116) 如何在Tomcat中解决缓存问题?

在Tomcat中解决缓存问题涉及多个方面的优化和处理&#xff0c;包括优化缓存配置、监控缓存状态、处理缓存失效和一致性问题等。以下是详细的步骤和代码示例&#xff0c;帮助你在Tomcat中解决缓存问题。 1. 优化缓存配置 Tomcat内置了一些静态资源的缓存机制&#xff0c;可以通…...

2.STM32F407ZGT6-外部中断

参考&#xff1a; 1.正点原子。 前言&#xff1a; MCU最重要的一个领域–中断。总结下嵌套向量和外部中断的概念。达到&#xff1a; 1.NVIC是什么&#xff0c;了解中断的整体管理理念。 2.中断里面最简单的外部中断&#xff0c;怎么配置处理。 3.使用STM32CubeMX配置外部中断的…...

C# 之某度协议登录,JS逆向,手机号绑定,获取CK

.NET兼职社区 .NET兼职社区 .NET兼职社区 .NET兼职社区 有需要指导&#xff0c;请私信我留言V或者去社区找客服。...

0基础学前端-----CSS DAY12

视频参考&#xff1a;B站Pink老师 今天是CSS学习的第十二天&#xff0c;今天开始的笔记对应Pink老师课程中的CSS第七天的内容。 本节重点&#xff1a;CSS高级技巧 本章目录 本节目标1. 精灵图1.1 为什么需要精灵图1.2 精灵图使用案例&#xff1a;拼出自己的名字 2. 字体图标2.…...

STM32——系统滴答定时器(SysTick寄存器详解)

文章目录 1.SysTick简介2.工作原理3.SysTick寄存器4.代码延时逻辑5.附上整体代码6.一些重要解释 1.SysTick简介 Cortex-M处理器内集成了一个小型的名为SysTick(系统节拍)的定时器,它属于NVIC的一部分,且可以产生 SysTick异常(异常类型#15)。SysTick为简单的向下计数的24位计数…...