首页 > 数据库 >手写Redis缓存系统,第一章:基于http协议实现的缓存系统

手写Redis缓存系统,第一章:基于http协议实现的缓存系统

时间:2024-08-10 12:57:59浏览次数:19  
标签:缓存 http Cache Redis Server cache main

关系描述

关系图文本描述

  1. main
    • 依赖 cache
    • 依赖 http
    • 流程:
      • main 包的 main 函数调用 cache.New("inmemory") 创建一个缓存实例。
      • main 包的 main 函数将缓存实例传递给 http.New(c) 创建一个 Server 实例。
      • Server 实例调用 Listen 方法启动 HTTP 服务器。
  2. http
    • 依赖 cache
    • 结构:
      • Server 结构体包含一个 cache.Cache 接口
      • Server 提供两个 HTTP 处理器:
        • cacheHandler:处理 /cache/ 路径的请求,调用 cache.Cache 接口的方法。
        • statusHandler:处理 /status 路径的请求,调用 cache.Cache 接口的 GetStat 方法。
    • 流程:
      • ServercacheHandler 处理 HTTP 方法(PUT、GET、DELETE)来操作缓存。
      • ServerstatusHandler 处理 GET 请求并返回缓存的状态信息。
  3. cache
    • 接口:
      • Cache 接口定义了 SetGetDelGetStat 方法。
    • 实现:
      • inMemoryCache 实现了 Cache 接口,提供了内存缓存的具体实现。
      • Stat 类型用于存储和更新缓存的统计信息。
    • 流程:
      • New(typ string) 函数根据传入的类型返回具体的 Cache 实现(例如 inMemoryCache)。
      • inMemoryCache 提供缓存操作的方法和统计信息。

关系图绘制

+---------------------+
|        main         |
|---------------------|
| - main()            |
| - cache.New()       |
| - http.New(c).Listen()|
+---------|-----------+
          |
          v
+---------------------+
|       http          |
|---------------------|
| - New(c cache.Cache) -> *Server |
| - Listen()          |
| - statusHandler()   |
| - cacheHandler()    |
+---------|-----------+
          |
          v
+---------------------+
|      cache          |
|---------------------|
| - New(typ string) -> Cache |
| - Cache interface   |
| - Stat struct       |
| - inMemoryCache struct |
+---------|-----------+
          |
          v
+---------------------+
|  cache/inmemory_cache.go |
|---------------------|
| - inMemoryCache struct    |
| - Set()                   |
| - Get()                   |
| - Del()                   |
| - GetStat()               |
+---------|-----------+
          |
          v
+---------------------+
|  cache/stat.go      |
|---------------------|
| - Stat struct       |
| - add()             |
| - del()             |
+---------------------+

解释

  1. main
    • main 包使用 cache 包中的 New 函数创建缓存实例,并将其传递给 http 包中的 New 函数,创建 Server 实例。
  2. http
    • Server 结构体依赖 cache 包中的 Cache 接口。
    • ServercacheHandlerstatusHandler 处理具体的 HTTP 请求,分别调用 cache.Cache 接口中的方法和 GetStat 方法。
  3. cache
    • Cache 接口定义了缓存操作的方法,inMemoryCache 实现了这些方法,Stat 类型用于缓存统计信息。

下面是一个简单的 Redis 风格的内存缓存实现代码。这些代码实现了类似于 Redis 的基本功能,包括键值存储和简单的统计功能。代码结构基于你提供的代码关系图:

1. main.go

package main

import (
	"mycache/cache"
	"mycache/http"
)

func main() {
   
	c := cache.New("inmemory")
	http.New(c).Listen()
}

2. http/server.go

package http

import (
	"mycache/cache"
	"encoding/json"
	"log"
	"net/http"
)

type Server struct {
   
	cache.Cache
}

func New(c cache.Cache) *Server {
   
	return &Server{
   c}
}

func (s *Server) Listen() {
   
	http.Handle("/cache/", s.cacheHandler())
	http.Handle("/status", s

标签:缓存,http,Cache,Redis,Server,cache,main
From: https://blog.csdn.net/lixiemang8887/article/details/141059007

相关文章

  • Redis持久化机制,主从与哨兵架构详解
    目录1.Redis持久化1.1RDB快照(snapshot)bgsave的写时复制(COW)机制save与bgsave对比:1.2 AOF(append-onlyfile)AOF重写RDB和AOF,应该用哪一个?1.3Redis4.0混合持久化2.Redis主从架构2.1Redis主从工作原理主从复制(全量复制)流程图:数据部分复制主从复制(部......
  • Spring Boot集成Redis
    目录1.Redis简介2.添加依赖3.项目配置4.使用RedisStringTestSetTestListTestHashTestZSetTest5.测试结果1.Redis简介Redis是一款基于内存的使用K-V结构存取数据的NoSQL非关系型数据库。Redis的主要作用就是缓存数据,通常,会将关系型数据库(例如MySQL等)中的数据读......
  • Redis缓存在项目中的使用升级
    对于redis在项目中的使用与介绍这里就不展开描述,与进行基本的代码构造了。这里针对redis的代码使用进行介绍一,最简单阶段(一)--简单使用redis缓存思想:拿数据先从缓存中拿去,如果缓存中没有再从数据库获取。packagecom.luojie.test.catchs;importcom.luojie.dao.mapper2.Ma......
  • HTTP协议基础知识【后端 4】
    HTTP协议基础知识HTTP(HyperTextTransferProtocol,超文本传输协议)是互联网上应用最为广泛的一种网络协议,它定义了客户端(如浏览器)与服务器之间数据传输的格式和规则。无论是浏览网页、在线购物还是使用各种Web应用,HTTP都扮演着至关重要的角色。本文将深入解析HTTP协议的基......
  • redis的几种常见问题
    缓存穿透redis缓存和数据库中没有相关数据解决方案对不存在的数据缓存到redis中,设置key,value值为null(不管是数据未null还是系统bug问题),并设置一个短期过期时间段,避免过期时间过长影响正常用户使用。拉黑该IP地址对参数进行校验,不合法参数进行拦截布隆过滤器将所有可能存......
  • redis数据结构
    redis数据类型 stringlisthashsetzsetHyperLogLogGEOBloomFilter(布隆过滤器)HyperLogLog基本概念:Redis在2.8.9版本添加了HyperLogLog结构。RedisHyperLogLog是用来做基数统计的算法,所谓基数,也就是不重复的元素。优点在输入元素的数量或者体积非常......
  • 二、Tauri 使用(http请求 axios)
    1.启用该功能        在tauri.conf.json文件中启用该功能,配置要请求的API路径,多个API的情况使用逗号隔开就可以了{ "tauri":{  "allowlist":{   "http":{    "all":true,    "request":true,    "scope":["http:......
  • 如何关闭redis的自动清理缓存,声明式事务(含有redis)如何解决,redis setnx锁的使用。
    20240809一、解决redis数据被删除的方案1、发现问题2、解决注意!!二、声明式事务(当有redis的时候)1.先看代码2.@Transactional(rollbackFor=Exception.class)3.如何解决redis在事务里面,如何保证原子性和一致性3.1我们可以用trycatchfinally来实现3.2我们可以让red......
  • 【前端】NodeJS:HTTP协议
    文章目录HTTP协议1概念2请求报文的组成3HTTP的请求行4请求头5HTTP的请求体6响应报文的组成7创建HTTP服务7.1操作步骤7.2测试7.3注意事项8浏览器查看HTTP报文8.1查看请求行和请求头8.2查看请求体8.3查看URL查询字符串8.4查看响应行与响应头8.5查看响应体......
  • C# httpclient上传文件
    ///<summary>///上传文件///</summary>///<paramname="file"></param>///<returns></returns>[HttpPost,Route("UploadFile")][NonAuthorize]publicasyncTask<Response<string>>UploadFile......