Redis的数据类型及使用场景

Redis的数据类型及使用场景 一、基本数据类型 1.字符串(String) string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。 string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如 jpg 图片或者序列化的对象。 string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。 常用命令: SET key value 设置指定 key 的值。 GET key 获取指定 key 的值。 应用场景: String 是最常用的一种数据类型,普通的 key/value 存储都可以归为此类,即可以完全实现目前 Memcached 的功能,并且效率更高。还可以享受 Redis 的定时持久化,操作日志及 Replication 等功能。除了提供与 Memcached 一样的 get、set、incr、decr 等操作外,Redis 还提供了下面一些操作: 获取字符串长度 往字符串 append 内容 设置和获取字符串的某一段内容 设置及获取字符串的某一位(bit) 批量设置一系列字符串的内容 使用场景: 常规 key-value 缓存应用。常规计数:微博数,粉丝数。 实现方式: String 在 redis 内部存储默认就是一个字符串,被 redisObject 所引用,当遇到 incr,decr 等操作时会转成数值型进行计算,此时 redisObject 的 encoding 字段为 int...

September 1, 2023 · 7 min · Leanku

SQL语法速成

SQL语法速成 SQL 语法结构 子句 - 是语句和查询的组成成分。(在某些情况下,这些都是可选的。) 表达式 - 可以产生任何标量值,或由列和行的数据库表 谓词 - 给需要评估的 SQL 三值逻辑(3VL)(true/false/unknown)或布尔真值指定条件,并限制语句和查询的效果,或改变程序流程。 查询 - 基于特定条件检索数据。这是 SQL 的一个重要组成部分。 语句 - 可以持久地影响纲要和数据,也可以控制数据库事务、程序流程、连接、会话或诊断。 SQL 语法要点 SQL 语句不区分大小写,但是数据库表名、列名和值是否区分,依赖于具体的 DBMS 以及配置。 例如:SELECT 与 select 、Select 是相同的。 多条 SQL 语句必须以分号 ; 分隔。 处理 SQL 语句时,所有空格都被忽略。SQL 语句可以写成一行,也可以分写为多行。 SQL 支持三种注释 ## 注释1 -- 注释2 /* 注释3 */ 增删改查,又称为 CRUD,数据库基本操作中的基本操作。 插入数据 INSERT INTO 语句用于向表中插入新记录。 插入完整的行 INSERT INTO user VALUES (10, 'root', 'root', 'xxxx@163.com'); 插入行的一部分 INSERT INTO user(username, password, email)VALUES ('admin', 'admin', 'xxxx@163....

September 1, 2023 · 2 min · Leanku

Kong API网关

Kong API网关 API网关特点 集合多个API,统一API入口 避免内部信息泄露 提供安全认证 支持混合通讯协议 降低微服务复杂度 常用的API网关有:NGINX,Zuul,Kong Kong 介绍 kong是微服务中的一个网关组件,具有高可用和可扩展性,能提供易于使用的restful api来操作和配置API管理系统,同时它也可以通过负载均衡的功能把请求均匀的分发到各个服务器上,应对大量的请求。基于Nginx和OpenResty,是一个具有分布式、高性能、高并发、可伸缩…亚毫秒级延迟等特性和功能的微服务抽象层。 konga 是kong的UI界面 多用户管理 管理多个kong节点 使用快照备份,还原和迁移Kong节点 使用运行状态检查监控节点和API状态 数据库集成postgresSQL Kong 流程图 Kong 安装 Kong下载安装 Konga下载安装 API操作 文档地址 示例: 负载均衡 # 添加负载均衡 curl -i -X POST \ -H "Content-Type:application/x-www-form-urlencoded" \ -d "name=demo-upstream" \ 'http://127.0.0.1:8001/upstreams' #设置权重 curl -i -X POST \ -H "Content-Type:application/x-www-form-urlencoded" \ -d "target=127.0.0.1:8000" \ -d "weight=100" \ 'http://127.0.0.1:8001/upstreams/demo-upstream/targets' curl -i -X POST \ -H "Content-Type:application/x-www-form-urlencoded" \ -d "target=127.0.0.1:8080" \ -d "weight=500" \ 'http://127....

August 1, 2023 · 2 min · Leanku

Konga

Konga Konga的本质:Konga是一个图形化界面,它最终是通过调用你配置的 Kong Admin API 来修改Kong的配置的。 文档参考:遇到复杂场景时,最好的老师依然是Kong官方文档。 一、首次登录与初始化设置 访问Konga并注册:在浏览器中打开 http://<你的服务器IP>:1337。首次访问时,Konga会要求你注册一个管理员账户。填写用户名、邮箱和密码完成注册。 登录系统:注册成功后,Konga会自动跳转到登录页面,使用刚才注册的账号密码登录即可 二、 连接Konga与Kong网关 进入连接设置:登录成功后,你应该会看到"CONNECTIONS"或"Connections"界面。如果没有,请在左侧菜单或顶部导航栏中找到并点击 “Connections”。 填写Kong Admin API信息: Connection name:为你这个Kong连接起个名字,比如"My-Kong"或"Production"。 Kong Admin URL:这是你Kong网关的Admin API地址。非常重要! 格式通常是 http://:8001 如果你的Kong容器和Konga容器在同一个Docker网络(如 kong-net)中,你可以使用Kong的容器名和内部端口,例如:http://kong:8001。 如果你希望通过宿主机IP访问,可能需要使用宿主机的IP和映射给Kong Admin API的端口(例如 http://localhost:8001 或 http://<宿主机IP>:8001)。 激活连接:信息填写完毕后,点击 “Active” 或 “Connect” 等按钮来激活并测试连接。如果一切正常,Konga会提示连接成功。 三、 Konga核心功能与使用介绍 连接成功后,你就可以使用Konga来管理Kong了。Konga的核心功能围绕以下几个概念展开,理解它们之间的关系很重要: 概念 (Concept) 作用 (Role) 类比 (Analogy) 配置要点 (Key Configuration) Upstream 负载均衡组:代表一个虚拟主机名,用于对后端多个Target进行负载均衡。 球队的名称 Name:为Upstream命名(如 my-api-upstream)。 Target 具体目标:代表一个物理服务(IP+Port),是Upstream组内的一个具体后端实例。必须先创建Upstream,才能添加Target。 球队里的一个球员 Target:后端服务的IP或主机名及端口(如 192.168.1.100:8080)。Weight:权重,流量分配比例。 Service 服务抽象:是上游服务的抽象,可以直接指向一个具体的URL,也可以关联一个Upstream来实现负载均衡。 比赛的战术安排 Name:服务名称。Protocol:协议(HTTP/HTTPS)。Host:可填写具体URL或关联的Upstream名称。Port:端口。Path:路径(可选)。 Route 路由规则:定义客户端请求的匹配规则(如路径、域名),将匹配的请求路由到指定的Service。 根据球衣颜色决定把球传给谁 Paths:匹配的请求路径(如 /api)。Hosts:匹配的域名(可选)。Service:选择该路由要关联的Service。 四、 创建服务 (Services) 和路由 (Routes) 这是最常用的功能,用于将外部请求转发到你的后端服务。...

August 1, 2023 · 1 min · Leanku

VirtualBox+Vagrant使用

VirtualBox+Vagrant使用 一、 介绍 1. VirtualBox简介 VirtualBox是一个开源的 虚拟机管理软件,由 Oracle 开发。它的核心功能是允许你在一台物理机上运行多个虚拟机,每个虚拟机都可以装不同的操作系统。 特点: 跨平台:支持 Windows、Linux、macOS 主机上安装。 支持多种客操作系统:常见的 Linux 发行版(CentOS、Ubuntu)、Windows Server、BSD 等。 虚拟化功能: 配置虚拟 CPU、内存、磁盘、网卡等。 支持桥接网络、NAT、仅主机网络等多种网络模式。 GUI + CLI 管理:既可以用图形界面管理虚拟机,也可以用命令行 VBoxManage 控制。 适合个人和开发使用:开源免费,功能较全。 2. Vagrant简介 Vagrant 是一个虚拟机 自动化管理工具,它本身不提供虚拟化功能,而是调用 VirtualBox、VMware、Hyper-V、Docker 等“虚拟化提供者”(provider)来创建和管理虚拟机。 特点: 开发环境自动化: 通过 Vagrantfile 描述一台(或多台)虚拟机的配置,比如操作系统镜像、CPU/内存、网络、共享目录等。 跨平台一致性: 不同开发者只要用相同的 Vagrantfile,就能快速得到一模一样的开发环境,避免“在我机器上没问题”。 支持多种 Provider: 默认支持 VirtualBox,也可以配合 VMware、Hyper-V、Libvirt、Docker。 Provisioning(自动化配置): 可以在虚拟机启动时自动执行脚本(Shell、Ansible、Puppet、Chef)来安装软件和配置环境。 命令行简单: vagrant init → 生成配置文件 vagrant up → 启动虚拟机 vagrant ssh → 进入虚拟机 vagrant halt → 关闭虚拟机 vagrant destroy → 删除虚拟机...

August 1, 2023 · 4 min · Leanku

ElasticSearch介绍

ElasticSearch 1. ElasticSearch介绍 Elasticsearch 是一个分布式、可扩展、实时的搜索和分析引擎,基于 Apache Lucene 构建。它能够快速存储、搜索和分析大量数据,广泛应用于全文搜索、日志分析、业务指标监控等场景。 Lucene 介绍 Lucene是开源、免费、高性能、纯Java编写的全文检索工具包 他是一个全文检索的工具包,是一个全文检索框架,并不是一个全文检索引擎 它非常复杂,并且需要Java集成使用 Lucene 和 ElasticSearch ElasticSearch和solr是基于lucene的开源项目 ElasticSearch通过简单易用的restful api接口,隐藏了lucene的复杂性 ElasticSearch自带分布式管理,并且可以跨语言使用 Lucene 和 Solr ElasticSearch自带分布式管理而Solr需要借助Zookpeeper实现分布式管理 Solr支持多格式的数据,在传统搜索中表现好于ES,但是它的更新效率比较低 ElasticSearch只支持json格式的数据,在处理实时索引搜索时明显好于Solr 2. 核心概念 1. 文档(Document) Elasticsearch 中的基本数据单元,类似于关系数据库中的一行记录。 文档以 JSON 格式存储,包含多个字段。 示例: { "id": 1, "title": "Elasticsearch Guide", "content": "Elasticsearch is a distributed search engine.", "tags": ["search", "distributed"] } 2.索引(Index) 索引是文档的集合,类似于关系数据库中的表。 每个索引有一个唯一的名称,用于标识和操作数据。 示例:books 索引存储所有书籍相关的文档。 3.类型(Type)(已弃用) 在早期版本中,索引可以包含多个类型(类似于表结构),但在 Elasticsearch 7.x 及更高版本中已被弃用。 4.分片(Shard) 索引可以被分成多个分片,每个分片是一个独立的 Lucene 索引。 分片允许数据水平拆分,支持分布式存储和并行处理。 分片分为主分片(Primary Shard)和副本分片(Replica Shard)。 5....

July 19, 2023 · 2 min · Leanku

PHP 8 新特性之枚举

PHP 8 新特性之枚举 枚举概览 枚举,或称 “Enum”,能够让开发者自定义类型为一系列可能的离散值中的一个。 在定义领域模型中很有用,它能够“隔离无效状态”(making invalid states unrepresentable)。 枚举以各种不同功能的形式出现在诸多语言中。 在 PHP 中, 枚举是一种特殊类型的对象。Enum 本身是一个类(Class), 它的各种条目(case)是这个类的单例对象,意味着也是个有效对象 —— 包括类型的检测,能用对象的地方,也可以用它。 最常见的枚举例子是内置的 boolean 类型, 该枚举类型有两个有效值 true 和 false。 Enum 使开发者能够任意定义出用户自己的、足够健壮的枚举。 Enum 类似 class,它和 class、interface、trait 共享同样的命名空间。 也能用同样的方式自动加载。 一个 Enum 定义了一种新的类型,它有固定、数量有限、可能的合法值。 示例 #1 用注解实现接口的可选方法 <?php // 通过传入参数:待搜索的注解类名,可返回指定的注解类, 而不需要再到反射类中迭代循环获取所有注解。 示例 <?php <?php // 声明新的枚举类型 Suit,仅有四个有效的值: Suit::Hearts、Suit::Diamonds、 Suit::Clubs、Suit::Spades。 enum Suit { case Hearts; case Diamonds; case Clubs; case Spades; } // 变量可以赋值为以上有效值里的其中一个。 函数可以检测枚举类型,这种情况下只能传入类型的值。 function pick_a_card(Suit $suit) { /* ....

June 11, 2023 · 1 min · Leanku

PHP 8 新特性之注解

PHP 8 新特性之注解功能 注解概览 注解功能提供了代码中的声明部分都可以添加结构化、机器可读的元数据的能力, 注解的目标可以是类、方法、函数、参数、属性、类常量。 通过 反射 API 可在运行时获取注解所定义的元数据。 因此注解可以成为直接嵌入代码的配置式语言。 通过注解的使用,在应用中实现功能、使用功能可以相互解耦。 某种程度上讲,它可以和接口(interface)与其实现(implementation)相比较。 但接口与实现是代码相关的,注解则与声明额外信息和配置相关。 接口可以通过类来实现,而注解也可以声明到方法、函数、参数、属性、类常量中。 因此它们比接口更灵活。 注解使用的一个简单例子:将接口(interface)的可选方法改用注解实现。 我们假设接口 ActionHandler 代表了应用的一个操作: 部分 action handler 的实现需要 setup,部分不需要。 我们可以使用注解,而不用要求所有类必须实现 ActionHandler 接口并实现 setUp() 方法。 因此带来一个好处——可以多次使用注解。 示例 #1 用注解实现接口的可选方法 <?php interface ActionHandler { public function execute(); } #[Attribute] class SetUp {} class CopyFile implements ActionHandler { public string $fileName; public string $targetDirectory; #[SetUp] public function fileExists() { if (!file_exists($this->fileName)) { throw new RuntimeException("File does not exist"); } } #[SetUp] public function targetDirectoryExists() { if (!...

June 11, 2023 · 2 min · Leanku

Consul注册中心

Consul注册中心 CAP原理 一致性(Consistency) 所有节点在同一时间具有相同的数据 可用性(Availablility) 保证每个请求不管或者失败都有响应 分区容错(Partition tolerance) 系统中任意数据的丢失或失败不会影响系统的继续运作 Consul 介绍 方便部署 采用Raft算法实现,有服务发现,key/value存储,可以做配置中心使用。有健康检查,同事提供了web管理页面 Consul角色 -dev 开发环境下的启动命令,提供基本的服务 -client 客户端,无状态的,将http和dns请求转发到服务端集群 -server 服务端,保存配置信息,可以搭建高可用的集群 Consul 内部端口 端口 说明 TCP/8300 8300端口用于服务器节点。客户端通过该端口RPC协议调用服务端接口。 TCP/UDP/8301 8301端口用于单个数据中心所有节点之间的相互通信,即对LAN池信息的同步。它使得整个数据中心能够自动发现服务器地址,分布式检测节点故障,事件广播 TCP/UDP/8302 8302端口用于单个或多个数据中心之间的服务器节点的信息同步。即对WAN池信息的同步。它针对互联网的高延迟进行了优化,能够实现跨数据中心请求。 8500 8500端口基于HTTP协议,用于API接口或WEB UI访问。 8600 8600端口作为DNS服务器,它使得我们可以通过节点名查询节点的信息。 Consul 工作原理 Consul 安装 下载地址 或者docker安装 docker run -d --name=consul -p 8500:8500 consul:1.15.4 agent -dev -client 0.0.0.0 -ui 安装完成后,命令行输入consul 检查 consul 是否可用 Consul支持web ui界面。UI可用于查看所有服务和节点,查看所有运行状况检查及其当前状态,以及读取和设置键/值数据。 用户界面自动支持多数据中心。要设置自带的UI,请使用-ui参数启动Consul代理: consul agent -ui UI可以在与HTTP API相同的端口上的/ui路径中使用。 默认情况下,这是http://localhost:8500/ui。 注册个服务 使用HTTP API 注册个服务,使用[接口API](https://www.consul.io/api/agent/service.html API)调用...

June 1, 2023 · 1 min · Leanku

常用Docker镜像

常用Docker镜像 php-msf-docker docker run --privileged --restart=always -it -d --hostname=php-msf --name=php-msf-docker -p 2202:22 -p 80:80 -p 8000:8000 -p 9501:9501 -v D:\Develop\Docker\WWW:/php-msf/data/www leanku/php-msf-docker Rabbitmq docker run -d --name rabbitmq -e RABBITMQ_DEFAULT_USER=guest -e RABBITMQ_DEFAULT_PASS=guest -p 15672:15672 -p 5672:5672 rabbitmq:3.8-management MySQL docker run -p 13306:3306 --name mysql5.7 -e MYSQL_ROOT_PASSWORD=root -v D:\Develop\Docker\app-mysql:/var/lib/mysql -d mysql:5.7 Redis docker run --name redis -p 6379:6379 -d redis redis-server --appendonly yes Elasticsearch docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery....

June 1, 2023 · 1 min · Leanku