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

Go语言实战案例-Redis连接与字符串操作

在高性能应用开发中,Redis 凭借其内存存储和高效的数据结构,常用于缓存、会话管理、计数器、消息队列等场景。

Go 语言可以通过官方推荐的 Redis 客户端库 go-redis 来与 Redis 交互。本文将演示如何:

  1. 1. 连接 Redis
  2. 2. 执行字符串操作(SETGETINCRDEL
  3. 3. 设置键的过期时间

一、环境准备

安装 go-redis 库:

go get github.com/redis/go-redis/v9

本地需运行 Redis 服务,可以用 Docker 快速启动:

docker run -d -p 6379:6379 redis

二、初始化 Redis 连接

package mainimport ("context""fmt""github.com/redis/go-redis/v9""log""time"
)var ctx = context.Background()
var rdb *redis.Clientfunc initRedis() {rdb = redis.NewClient(&redis.Options{Addr:     "localhost:6379", // Redis 地址Password: "",               // 无密码DB:       0,                // 默认 DB})// 测试连接_, err := rdb.Ping(ctx).Result()if err != nil {log.Fatal("Redis 连接失败:", err)}log.Println("Redis 连接成功")
}

三、Redis 字符串操作

1. 设置键值

func setValue() {err := rdb.Set(ctx, "username", "gopher", time.Minute).Err()if err != nil {log.Println("设置失败:", err)return}log.Println("设置成功: username=gopher (有效期1分钟)")
}

2. 获取键值

func getValue() {val, err := rdb.Get(ctx, "username").Result()if err == redis.Nil {log.Println("key 不存在")} else if err != nil {log.Println("获取失败:", err)} else {log.Println("获取成功: username=", val)}
}

3. 自增计数器

func incrCounter() {val, err := rdb.Incr(ctx, "counter").Result()if err != nil {log.Println("自增失败:", err)return}log.Println("计数器值:", val)
}

4. 删除键

func deleteKey() {_, err := rdb.Del(ctx, "username").Result()if err != nil {log.Println("删除失败:", err)return}log.Println("删除成功: username")
}

四、测试执行

func main() {initRedis()setValue()getValue()incrCounter()incrCounter()deleteKey()getValue()
}

五、运行效果

Redis 连接成功
设置成功: username=gopher (有效期1分钟)
获取成功: username= gopher
计数器值: 1
计数器值: 2
删除成功: username
key 不存在

六、总结

通过本案例,我们学习了:

  • • 使用 go-redis 连接 Redis
  • • 字符串操作:SETGETINCRDEL
  • • 设置过期时间,控制缓存生命周期

👉 Redis 的字符串操作非常适合做:

  • • 缓存热点数据(比如用户信息、文章内容)
  • • 分布式计数器(比如点赞数、访问量统计)
  • • 临时令牌存储(比如登录验证码)

http://www.xdnf.cn/news/18457.html

相关文章:

  • 井云智能体封装小程序:独立部署多开版 | 自定义LOGO/域名,打造专属AI智能体平台
  • IDEA控制台乱码(Tomcat)解决方法
  • IDEA相关的设置和技巧
  • 机器人 - 无人机基础(5) - 飞控中的传感器(ing)
  • CTFshow Pwn入门 - pwn 19
  • 《天龙八部》角色安全攻防全解析:从渗透测试视角看江湖成败
  • 【Golang】有关任务窃取调度器和抢占式调度器的笔记
  • STM32F1 USART介绍及应用
  • 开发指南134-路由传递参数
  • 支持蓝牙标签打印的固定资产管理系统源码(JAVA)
  • linux编程----网络通信(TCP)
  • LLM实践系列:利用LLM重构数据科学流程04 - 智能特征工程
  • 博士招生 | 英国谢菲尔德大学 招收计算机博士
  • 项目中优惠券计算逻辑全解析(处理高并发)
  • Unreal Engine UStaticMeshComponent
  • JUC之CompletionService
  • DFS序与树链剖分入门
  • 开发避坑指南(35):mybaits if标签test条件判断等号=解析异常解决方案
  • 文件系统层面的可用块数量可用空间和比例
  • AI重塑职业教育:个性化学习计划提效率、VR实操模拟强技能,对接就业新路径
  • 拿到手一个前端项目,应该如何启动
  • 开发避坑指南(34):mysql深度分页查询优化方案
  • Ubuntu解决makefile交叉编译的问题
  • Android Jetpack | Hilt
  • 机器人爆发、汽车换代,速腾聚创开始讲新故事
  • WindowsAPI|每天了解几个winAPI接口之网络配置相关文档Iphlpapi.h详细分析八
  • 【数据结构】选择排序:直接选择与堆排序详解
  • 前端项目打包+自动压缩打包文件+自动上传部署远程服务器
  • 为什么需要关注Flink并行度?
  • 【C#】观察者模式 + UI 线程调度、委托讲解