官网: https://gofrp.org/frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。frp 采用 Golang 编写,支持跨平台,仅需下载对应平台的二进制文件即可执行,没有额外依赖。由于采用 Golang 编写,所以系统需求和最新的 Golang 对系统和平
转载
2023-09-03 16:56:06
72阅读
# 实现一个简单的“手写 Redis”
## 一、项目概述
Redis 是一个开源的内存数据结构存储,用作数据库、缓存和消息代理。为了加深对 Redis 背后原理的理解,我们可以从零开始实现一个简化版的 Redis。本文将指导你如何实现一个简单的 Redis,完成的步骤包括:
| 步骤 | 描述 |
|-------|------------
原创
2024-09-06 05:00:39
57阅读
## Go语言手写项目
Go语言是一种面向对象的编程语言,它具有简洁、高效、并发性强等特点,因此在开发中非常受欢迎。在本文中,我们将介绍如何使用Go语言手写一个项目,并通过代码示例和流程图来帮助读者更好地理解。
### 项目介绍
我们的项目是一个旅行管理系统,用于记录和管理用户的旅行信息。用户可以登录系统,添加、查看和删除旅行信息。在这个项目中,我们将使用Go语言来实现后台逻辑和数据持久化,
原创
2024-01-23 07:28:26
42阅读
学习别人的知识,然后自己也分不清是记住了还是理解了,然后就写一写,发现看过的会了,和自己写一遍还是有差别的,希望自己这次可以坚持的好点,加油!思路:先查询redis中是否有缓存的数据,如果没有,就查询mysql数据库,查询到数据后,将查询到的数据写到redis中,设置expire超时时间。
注意点:从数据库中查询到的结果是结构体切片,所以需要先定义一个结构体,这个结构体和查询出的数据的字段对应,注
转载
2023-05-26 15:07:31
96阅读
Redis的事务,Go+luaRedis 事务Redis的基本事务(basic transaction)需要用到MULTI命令和EXEC命令,这种事务可以让一个客户端在不被其他客户端打断的情况下执行多个命令。和关系数据库那种可以在执行的过程中进行回滚(rollback)的事务不同,在Redis里面,被MULTI命令和EXEC命令包围的所有命令会一个接一个地执行,直到所有命令都执行完毕为止。当一个事
转载
2023-09-10 21:50:06
92阅读
最近遇到一个有意思的关于分布式锁的问题,期间产生了有很多有意思的问题和讨论,这里记录一下。在大多数场景下很多程序员都喜欢使用redis来做分布式锁,但是公司内最近缓存服务为了推行标准化禁用了lua脚本,使得原有的分布式锁实现都要另谋出路,最后选择了zk来做分布式锁,因为go-zookeeper只支持阻塞锁,做了一些改造使其支持非阻塞和待失效时间的锁,有类似需求的同学也可以参考下https://gi
转载
2023-08-15 18:09:32
66阅读
先下载redis的包go get -u github.com/go-redis/redis/v8 代码实现//redis
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
"time"
)
var rdb *redis.Client
//初始化链接
func initClient() (err error) {
rdb
转载
2023-07-03 16:45:15
102阅读
使用redis实现分布式令牌桶算法:团队接了个根据告警的进行处理的需求,需要限制这个处理的速度,比如说一个小时只能最多处理三个,防止在晚上出现大量不可控变更影响。令牌桶算法原理可以参照,k8s限速队列、令牌桶原理可以参照k8s限速队列。问题描述限速队列在单实例的环境下用go可以很方便实现,大概是使用一个定时任务来轮询。设定一个根据补充间隔设定定时任务要是bucket是满的就直接更新时间并返回,bu
转载
2023-07-06 23:06:02
64阅读
缓存和 LRU 算法
缓存是计算机编程中的一种技术,用于临时存储数据以加速访问和提高性能。缓存是提高系统性能、减少延迟和优化用户体验的重要工具。合理使用缓存技术,开发人员可以构建更加高效和可靠的应用程序。缓存的重要性体现在以下方面:
首先,缓存通过减少数据读取时间来提升系统性能。当应用程序频繁访问某些数据时,直接从原始数据源读取会花费大量时间。将常用数据存储在缓存中,系统可以更快速地访问所需数据,
原创
精选
2024-08-12 14:41:11
204阅读
验证下映射到分片的hash算法--------------------0.原子操作,要么都成功,要么都失败,集群不支持TxPipeli用连接池...
原创
2023-02-23 08:57:24
66阅读
一、节点间的内部通信机制1、基础通信原理(1)redis cluster节点间采取gossip协议进行通信跟集中式不同,不是将集群元数据(节点信息,故障,等等)集中存储在某个节点上,而是互相之间不断通信,保持整个集群所有节点的数据是完整的维护集群的元数据用得,集中式,一种叫做gossip集中式:好处在于,元数据的更新和读取,时效性非常好,一旦元数据出现了变更,立即就更新到集中式的存储中,其他节点读
转载
2024-02-26 20:36:23
82阅读
为啥要使用连接池:因为TCP的三只握手等等原因,建立一个连接是一件成本比较高的行为。所以在一个需要多次与特定实体交互的程序中,就需要维持一个连接池,里面有可以复用的连接可供重复使用 mysql下载依赖包 go get -u github.com/go-sql-driver/mysql func ConnectMysql() *sql.DB {
dataSour
转载
2023-07-11 22:49:05
291阅读
go连接并简单操作redis 文章目录go连接并简单操作redis一、下载依赖库一、redis数据库的链接?二、简单的使用1.string类型数据的插入查询2.struct类型数据的插入查询3. map类型数据的插入查询4.List 数据的插入删除5.操作set6.操作zset7.设置过期时间8.自定义命令参考总结 一、下载依赖库go get github.com/go-redis/redis/v
转载
2023-07-13 14:01:15
152阅读
redis是目前流行的高性能key/value缓存,基本上在各种项目都经常出现,后续教程针对golang如何操作redis进行展开。本教程是使用的是go-redis/redis包操作redis。 github: GitHub - go-redis/redis: Type-safe Redis client for Golang1.安装依赖包 go get -u github.c
转载
2023-08-15 17:02:57
278阅读
今天随手写了一个go测试程序 观察使用pipeline与不使用性能差异先看结论耗时差距 测试代码如下var global_con redis.Conn
const access_count = 100
func connect_redis(adress string) bool {
con, err := redis.Dial("tcp", adress, redis.DialPasswor
转载
2023-05-30 15:50:55
259阅读
缓存缓存是我们开发过程中必不可少的一项提供接口性能的方式,但是,对项目引入缓存也会带来问题,比如缓存穿透,HotKey,缓存雪崩,缓存击穿,缓存一致性的问腿。所以,我们可能在缓存库中加入一些解决方案。设计的目标我们的目标是设计一个通用的缓存库。设计的目标如下基本操作提供基础操作,创建和删除缓存。// Cache ...
type Cache interface {
Set(ctx context
转载
2023-10-19 23:18:14
115阅读
最近翻阅了几本跟Redis相关的书籍,比如《Redis设计与实现 第二版》和钱老师的《Redis深度历险:核心原理与应用实践》,想着Redis的核心功能无非就是操作数据嘛,就像做一个Go语言版的Redis,不仅提升了对Redis源码的了解,也提高了Go语言的编码能力,说干就干。代码地址:JaricY/miniRedis (github.com)选用Go的原因是因为Go相对于C语言提供了更多的高级
转载
2024-05-15 04:02:20
29阅读
Redis Cluster架构优化在《全面剖析Redis Cluster原理和应用》中,我们已经详细剖析了现阶段Redis Cluster的缺点:无中心化架构Gossip消息的开销不停机升级困难无法根据统计区分冷热数据客户端的挑战Cluster协议支持连接和路由表的维护开销MultiOp和Pipeline支持有限Redis实现问题不能自动发现不能自动Resharding无监控管理UI最终一致性和“
转载
2024-08-26 07:27:33
37阅读
一、CacheCloud介绍该项目由搜狐开源,源代码托管至github上,地址为:https://github.com/sohutv/cachecloud。 CacheCloud提供一个Redis云管理平台:实现多种类型(Redis Standalone、Redis Sentinel、Redis Cluster)自动部署、解决Redis实例碎片化现象、提供完善统计、监控、运维功
转载
2023-09-15 14:36:35
72阅读
一、pipeline出现的背景redis客户端执行一条命令分4个过程:发送命令 -> 命令排队 -> 命令执行 -> 返回结果这个过程称为Round trip time(简称RTT, 往返时间),mget、mset有效节约了RTT,但大部分命令不支持批量操作,需要消耗N次RTT ,这个时候需要pipeline来解决这个问题。Pipeline 主要是一种网络优化,它本质上意味着客户
转载
2023-06-13 19:25:10
285阅读