将通用结构保存到 redis

2023-12-20

在编写 golang Web 服务器时,我必须使用某种缓存,所以我选择了 redis。 我需要某种可以接受任何结构并将其作为值保存到 Redis 的函数。 有什么方法可以在不使用的情况下做到这一点interface{}作为接收参数或重复太多但仍保持类型安全?


使用以下命令将结构体值编码为 []bytegob https://godoc.org/encoding/gob, json https://godoc.org/encoding/json或类似的编码包。将 [] 字节存储在 Redis 中。获取数据时逆向执行该过程。

假设 Redis 客户端具有以下方法:Set https://redis.io/commands/set and Get https://redis.io/commands/get,使用 JSON 包的代码将如下所示:

func set(c *RedisClient, key string, value interface{}) error {
    p, err := json.Marshal(value)
    if err != nil {
       return err
    }
    return c.Set(key, p)
}

func get(c *RedisClient, key string, dest interface{}) error {
    p, err := c.Get(key)
    if err != nil {
       return err
    }
    return json.Unmarshal(p, dest)
}

像这样使用它来保存值:

var v someType
if err := set(c, key, v); err != nil {
     // handle error
}

并像这样检索一个值。请注意,指向该值的指针被传递给get.

var v someType
if err := get(c, key, &v); err != nil {
     // handle error
}

详细信息需要根据您使用的 Redis 客户端进行调整。

只要应用程序使用相同类型设置和获取给定键的值,这种方法就可以避免重复,并且是类型安全的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将通用结构保存到 redis 的相关文章

  • 关于编写惯用的 Golang 的建议

    我正在掌握 Golang 的做事方式 首先是一些示例代码 package main import log os func logIt s string f os OpenFile errors log os O RDWR os O CREA
  • 为什么 DER ASN.1 大整数的解组在 Golang 中仅限于 SEQUENCE?

    我希望能够使用encoding asn1 包从 DER 文件中解组一个大整数 但它看起来只适用于整数序列 例如 这不起作用 这很奇怪 因为 Big Int 的编组效果很好 https play golang org p Wkj0jAA6bp
  • 运行最新版本时没有“最新”消息?

    我正在尝试使用Sparkle https sparkle project org与 Qt Go 的绑定 https github com therecipe qt app 闪光 m import
  • 云存储 API 的错误导入“系统调用”

    我正在按照以下说明进行操作https cloud google com appengine docs go googlecloudstorageclient download开始将一些代码从现已弃用的文件 API 迁移到新的 Cloud S
  • 如何将长 Go 模板函数拆分为多行?

    我有一个很长的printf调用 Go 模板 例子 printf mongodb s s s s authSource admin replicaSet s readPreference nearest w majority Values r
  • 如何读取 UDP 连接直至超时?

    我需要读取 UDP 流量 直到超时 我可以通过在 UDPConn 上调用 SetDeadline 并循环直到出现 I O 超时错误来做到这一点 但这看起来很黑客 基于错误条件的流量控制 下面的代码片段看起来更正确 但并没有终止 在生产中 这
  • Laravel Redis 配置

    我目前正在使用 Laravel 和 Redis 创建一个应用程序 几乎一切都工作正常 我按照文档中的说明扩展了身份验证 用户可以订阅 登录 注销 我可以创建内容 所有内容都存储在 Redis 中 但我有一个问题 我无法运行 php arti
  • 所有可能的 GOOS 价值?

    如果我做对了 GOOS在编译源代码时确定 为了更好地支持多个操作系统 我感兴趣的是GOOS可能 当然 Go 是开源的 所以它可能有无限的可能性 所以我真正想要的是一个 通用列表 已知值为 windows linux darwin or fr
  • golang中如何将相对路径解析为绝对路径?

    节点中是否有类似 path resolve 的API 或者有什么东西可以做同样的事情 例如 nodejs代码 path resolve sample sh 应该得到 home currentuser sample sh 解决 表示用户主目录
  • 如何在 Go 中获取给定月份的第一个星期一?

    我正在尝试获取给定月份的第一个星期一 我能想到的最好方法是循环前 7 天 然后返回 Weekday Monday 有一个更好的方法吗 通过查看时间的 Weekday 您可以计算出第一个星期一 package main import fmt
  • 由于配置文件错误,无法启动 Redis 服务器

    我刚刚按照此处的说明安装了 Redis http redis io download http redis io download 当我运行 redis server redis conf 时出现以下错误 FATAL CONFIG FILE
  • 管理多租户 ArangoDB 连接

    我使用 ArangoDB Go 使用 go driver 并且需要实现多租户 这意味着每个客户都将在单独的数据库中拥有他的数据 我想要弄清楚的是如何使这种多租户发挥作用 我知道为每个请求创建一个新的数据库连接是不可持续的 这意味着我必须维护
  • 结构体到磁盘的高效 Go 序列化

    我的任务是将 C 代码替换为 Go 而且我对 Go API 还很陌生 我正在使用 gob 将数百个键 值条目编码到磁盘页面 但 gob 编码有太多不需要的膨胀 package main import bytes encoding gob f
  • 仅导出嵌入结构实现的方法子集

    是否可以仅导出嵌入结构实现的方法的子集 这是一种与减少代码复制和粘贴非常不同的方法吗 还有更惯用的方法吗 type A struct func a A Hello fmt Println Hello func a A World fmt P
  • 在 Golang 中生成固定长度的随机十六进制字符串的有效方法?

    我需要生成很多固定长度的随机十六进制字符串 我找到这个解决方案golang中如何生成固定长度的随机字符串 https stackoverflow com a 31832326 710955 我正在做这样的事情 const letterByt
  • 不支持的 Perl 语法:`(?<`

    我想解析 cmd gpg list keys 的结果以将其显示在浏览器上 cmd输出是这样的 pub rsa3072 2021 08 03 SC expires 2023 08 03 07C47E284765D5593171C18F00B1
  • 无法在 Golang 中导入本地模块

    我正在尝试导入本地模块 但无法使用以下命令导入它go mod 我最初使用以下方式构建了我的项目go mod init github com AP Ch2 GOMS 注意我的环境是go1 14我使用 VSCode 作为我的编辑器 这是我的文件
  • Goroutine 是如何工作的? (或者:goroutines 和操作系统线程的关系)

    其他 goroutine 如何在调用系统调用时继续执行 当使用 GOMAXPROCS 1 时 据我所知 当调用系统调用时 线程会放弃控制权 直到系统调用返回 Go 如何在不为每个阻塞系统调用 goroutine 创建系统线程的情况下实现这种
  • 批量将Dictionary中的数据设置到Redis中

    我正在使用 StackExchange Redis DB 插入键值对字典Batch如下 private static StackExchange Redis IDatabase database public void SetAll
  • 模块路径格式错误...第一个路径元素中缺少点

    我有一个包含 2 个不同可执行文件的项目 每个可执行文件都有自己的依赖项以及对根的共享依赖项 如下所示 Root gt server gt main go gt someOtherFiles go gt go mod gt go sum g

随机推荐

  • Tomcat 7 和 Java 8 兼容性问题

    根据 catalina out 安装 Oracle Java 8 并将 tomcat7 指向 java8 会产生以下错误 INFO Deploying web application directory var lib tomcat7 we
  • 我可以使用字符串引用对象吗?

    所以我的代码如下所示 Dim i As Integer Dim labelnum As String For i 1 To 81 labelnum Label i If labelnum Caption Label1 Caption The
  • 如何使用正则表达式替换字符串的一部分

    我需要替换 Javascript 中字符串的一部分 下面的例子应该可以澄清我的意思 var str asd 595442 A 30327 0 var strToReplace 30333 var strDesiredResult asd 5
  • 使用模块设置Ocaml

    我正在创建一个使用语法的程序 并查看该语法是否为 LL 1 我想使用Set模块 但我不知道如何进行 当然 set元素的类型将是char 你能帮忙吗 这个答案假设您已经知道如何确定语法是否为 LL 1 并且只是在寻求有关 Objective
  • java.lang.IllegalArgumentException kafka控制台消费者

    我们在我们的环境中使用 Kafka 2 10 0 9 0 2 4 2 0 258 我们在 kafka 控制台消费者的几个主题上遇到了以下异常 我知道有时进入这些主题的消息太大 但它们不会超过 message max bytes kafka
  • Cmake 正在将某些内容安装到 /usr/local/include 和 /usr/lib 而不是 /usr/include [重复]

    这个问题在这里已经有答案了 我正在读这个如何构建和安装 GLFW 3 并在 Linux 项目中使用它 https stackoverflow com questions 17768008 how to build install glfw
  • Windows 服务无法复制到文件共享

    我有一个 Windows 服务 用于将文件从本地目录复制到 samba 共享 该服务通过 UNC 路径连接到服务器 即 remoteserver shareddir 我已以运行该服务的用户身份登录 并且能够使用 UNC 路径在 samba
  • 使用 Spark 列出 Hadoop HDFS 目录中的所有文件?

    我想循环遍历 Hadoop 目录中的所有文本文件并计算 错误 一词的所有出现次数 有没有办法做一个hadoop fs ls users ubuntu 使用 Apache Spark Scala API 列出目录中的所有文件 从给定的第一个例
  • React Router 4——监听路由操作并以编程方式继续/停止路由[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 这是我的场景 我有一个用户表单 用户可以在其中输入详细信息 我想在用户尝试离开当前页面时创建一条确认消息 即 嘿 您有未保存的更改 我
  • 与厨师一起重命名文件的最佳方法

    如何使用 Chef 重命名文件 In the chef doc http wiki opscode com display chef Resources Resources File我只发现 创造 如果缺失则创建 delete touch
  • php代码在html中还是html在php中? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何配置 Mongodb 的缓存大小?

    我需要在 Mongodb 中处理缓存 这样做需要大量 RAM 吗 在这种情况下使用存储引擎有什么特点和优势 方法 重启后无效 bin mongo 管理员 db adminCommand setParameter 1 wiredTigerEn
  • C#:反序列化 XML 文件错误(认为这是命名空间问题 - 但我一生都无法解决)

    我正在反序列化一个来自我们客户之一的 Web 服务的 XML 文件 问题是 在使用 xsd exe 创建类后 我反序列化该文件并得到通常的 XML 文档中存在错误 2 2 视觉工作室错误 我认为这是第 2 行 它指向命名空间声明 XML 文
  • 将 Java 的 Integer 转换为 Scala 的 Int

    我有一段返回的 Java 代码java lang Integer它可以是null someClass getMyInteger 但是当我在 Scala 类中使用它时 我收到此错误 导致 java lang NullPointerExcept
  • HealthKit:HKObserverQuery 未触发

    我正在尝试做一件非常基本的事情 设置一个 HKObserverQuery 以便我可以知道各个数据点何时发生更改 我已确保用户已授权应用程序使用相关数据点 无论出于何种原因 我可以在每次启动应用程序时触发查询 但当我关闭应用程序 进入 健康
  • __unsafe_unretained 和弱并在 ARC 下分配? [复制]

    这个问题在这里已经有答案了 可能的重复 强 弱 保留 unsafe unretained 分配 https stackoverflow com questions 9784762 strong weak retain unsafe unre
  • 如何在WPF选项卡控件中创建梯形选项卡

    如何在WPF选项卡控件中创建梯形选项卡 我想创建非矩形选项卡 看起来像 Google Chrome 中的选项卡或 VS 2008 代码编辑器中的选项卡 可以用 WPF 样式完成还是必须用代码绘制 互联网上有可用的代码示例吗 Edit The
  • 为什么当参数相等时 std::sort 比较函数必须返回 false?

    在 std sort 中 您可以提供第三个参数 它是列表排序方式的基础 如果您希望第一个参数先出现 则返回 true 如果您希望第二个参数先出现 则返回 false 我遇到了这样的问题 我的谓词函数应该是 无效的比较器 我已将其范围缩小到它
  • @mui/material/styles 和 @mui/styles 之间的区别?

    在 Material UI v5 中 一些 API 使用是从 mui material styles like useTheme 一些API的使用是从导入的 mui styles like makeStyles 我可以只使用一个库中的那些与
  • 将通用结构保存到 redis

    在编写 golang Web 服务器时 我必须使用某种缓存 所以我选择了 redis 我需要某种可以接受任何结构并将其作为值保存到 Redis 的函数 有什么方法可以在不使用的情况下做到这一点interface 作为接收参数或重复太多但仍保