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

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.dtcms.com/a/347141.html

相关文章:

  • python 字典有序性的实现和OrderedDict
  • 字节跳动开源Seed-OSS:36B参数模型以512K上下文与可控思考预算重新定义AI实用主义
  • Linux:进程间通信(IPC)-SystemV
  • MiMo-VL 技术报告
  • 文献阅读笔记【物理信息机器学习】:Physics-informed machine learning
  • AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年8月23日第168弹
  • Java 泛型 T、E、K、V、?、S、U、V
  • 脑洞补给站—金湾读书会—第二期—课题分离——20250823
  • GitHub 热榜项目 - 日榜(2025-08-23)
  • 小白成长之路-k8s原理(一)
  • 新能源电池深孔检测:新启航方案以激光频率梳技术打破光学遮挡,达 2μm 级
  • imx6ull-驱动开发篇36——Linux 自带的 LED 灯驱动实验
  • 使用Ollama部署自己的本地模型
  • LeetCode第1019题 - 链表中的下一个更大节点
  • IntelliJ IDEA 集成 ApiFox 操作与注解规范指南
  • 【K8s】微服务
  • 浙江龙庭翔新型建筑材料有限公司全屋定制:畅享品质生活新境界!
  • window将exe注册成服务
  • 【40页PPT】企业如何做好大数据项目的选型(附下载方式)
  • 说说你对Integer缓存的理解?
  • 商超高峰客流统计误差↓75%!陌讯多模态融合算法在智慧零售的实战解析
  • 基于 FastAPI 和 OpenFeature 使用 Feature Flag 控制业务功能
  • 【Game】Powerful——Punch and Kick(12.2)
  • Ape.Volo项目源码学习(1:源码下载及运行)
  • 【KO】前端面试题四
  • 08_正则表达式
  • goland编译过程加载dll路径时出现失败
  • 【golang】ORM框架操作数据库
  • 8.23 JavaWeb(登录 P156-P170)
  • 什么是多元线性回归,系数、自变量、因变量是什么,多元线性回归中的线性是什么