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

【golang学习笔记 gin 】1.2 redis 的使用

安装redis

go get -u github.com/gin-gonic/gin
go get -u github.com/go-redis/redis/v8

创建相关目录

gotest->conifg->database.go->redis.go->controller ->index.go->model->user.go->router->router.gomain.go 

在这里插入图片描述

封装Redis

package config
import ("github.com/go-redis/redis/v8""context""time"
)
var rdb *redis.Client
var Ctx = context.Background()func InitRedis() {rdb = redis.NewClient(&redis.Options{Addr:     "localhost:6379", // Redis 服务器地址Password: "",                // Redis 密码DB:       0,                 // 选择的数据库})// 检查 Redis 连接_, err := rdb.Ping(Ctx).Result()if err != nil {panic(err)}
}// HashSet 设置 hash 字段
func HashSet(key, field, value string) error {
return rdb.HSet(Ctx, key, field, value).Err()
}
// HashMSet 批量设置 hash
func HashMSet(key string, fields map[string]interface{
}) error {
return rdb.HMSet(Ctx, key, fields).Err()
}
// HashGet 获取 hash 字段
func HashGet(key, field string) (string, error) {
return rdb.HGet(Ctx, key, field).Result()
}
// HashGetAll 获取所有字段
func HashGetAll(key string) (map[string]string, error) {
return rdb.HGetAll(Ctx, key).Result()
}
// HashDel 删除字段
func HashDel(key string, fields ...string) error {
return rdb.HDel(Ctx, key, fields...).Err()
}
// HashExists 判断字段是否存在
func HashExists(key, field string) (bool, error) {
exists, err := rdb.HExists(Ctx, key, field).Result()
return exists, err
}// ListLPush 从左侧插入
func ListLPush(key string, values ...interface{
}) error {
return rdb.LPush(Ctx, key, values...).Err()
}
// ListRPush 从右侧插入
func ListRPush(key string, values ...interface{
}) error {
return rdb.RPush(Ctx, key, values...).Err()
}
// ListLPop 从左侧弹出
func ListLPop(key string) (string, error) {
return rdb.LPop(Ctx, key).Result()
}
// ListRPop 从右侧弹出
func ListRPop(key string) (string, error) {
return rdb.RPop(Ctx, key).Result()
}
// ListRange 获取范围 [start, stop]
func ListRange(key string, start, stop int64) ([]string, error) {
return rdb.LRange(Ctx, key, start, stop).Result()
}
// ListLen 获取长度
func ListLen(key string) (int64, error) {
return rdb.LLen(Ctx, key).Result()
}
// ListDel 删除整个 list
func ListDel(key string) error {
return rdb.Del(Ctx, key).Err()
}// SetAdd 添加元素
func SetAdd(key string, members ...interface{
}) error {
return rdb.SAdd(Ctx, key, members...).Err()
}
// SetMembers 获取所有元素
func SetMembers(key string) ([]string, error) {
return rdb.SMembers(Ctx, key).Result()
}
// SetIsMember 判断是否是成员
func SetIsMember(key string, member interface{
}) (bool, error) {
exists, err := rdb.SIsMember(Ctx, key, member).Result()
return exists, err
}
// SetRem 删除元素
func SetRem(key string, members ...interface{
}) error {
return rdb.SRem(Ctx, key, members...).Err()
}
// SetCard 获取集合大小
func SetCard(key string) (int64, error) {
return rdb.SCard(Ctx, key).Result()
}
// SetPop 随机弹出一个元素
func SetPop(key string) (string, error) {
return rdb.SPop(Ctx, key).Result()
}//StringSet 设置字符串
func  Set(key, value string, expiration time.Duration) error {
return rdb.Set(Ctx, key, value, expiration).Err()
}
// StringGet 获取字符串
func  Get(key string) (string, error) {
return rdb.Get(Ctx, key).Result()
}
// StringDel 删除字符串
func  Del(key string) error {
return rdb.Del(Ctx, key).Err()
}
// StringExpire 设置过期时间
func  Expire(key string, expiration time.Duration) error {
return rdb.Expire(Ctx, key, expiration).Err()
}
// StringExists 检查是否存在
func StringExists(key string) (bool, error) {
count, err := rdb.Exists(Ctx, key).Result()
return count >
0, err
}// ZAdd 添加元素(score, member)
func ZAdd(key string, members ...*redis.Z) error {
return rdb.ZAdd(Ctx, key, members...).Err()
}
// ZRange 获取升序范围
func ZRange(key string, start, stop int64) ([]string, error) {
return rdb.ZRange(Ctx, key, start, stop).Result()
}
// ZRevRange 获取降序范围
func ZRevRange(key string, start, stop int64) ([]string, error) {
return rdb.ZRevRange(Ctx, key, start, stop).Result()
}
// ZRangeWithScores 获取带分数的元素
func ZRangeWithScores(key string, start, stop int64) ([]redis.Z, error) {
return rdb.ZRangeWithScores(Ctx, key, start, stop).Result()
}
// ZScore 获取成员分数
func ZScore(key, member string) (float64, error) {
return rdb.ZScore(Ctx, key, member).Result()
}
// ZRem 删除成员
func ZRem(key string, members ...string) error {
var interfaceMembers []interface{
}
for _, member := range members {
interfaceMembers = append(interfaceMembers, member)
}
return rdb.ZRem(Ctx, key, interfaceMembers...).Err()
}
// ZCard 获取有序集合大小
func ZCard(key string) (int64, error) {
return rdb.ZCard(Ctx, key).Result()
}
// ZRank 获取升序排名
func ZRank(key, member string) (int64, error) {
return rdb.ZRank(Ctx, key, member).Result()
}
// ZRevRank 获取降序排名
func ZRevRank(key, member string) (int64, error) {
return rdb.ZRevRank(Ctx, key, member).Result()
}

全局引用 main.go

package main
import ("gotest/router""gotest/config"
)func main() {config.InitRedis() // 初始化Redis客户端r := router.SetupRouter() // 使用路由设置函数来初始化路由和中间件等。r.Run(":8080")            // 监听并在 0.0.0.0:8080 上启动服务。默认情况下,Gin使用的是HTTP协议。如果你需要HTTPS,可以使用`r.RunTLS(":8080", "certfile", "keyfile")`。
}

测试调用

package controller
import ("fmt""github.com/gin-gonic/gin""gotest/config""gotest/model"
)
func RedisHandler(c *gin.Context) {key := "name"value := "我成功設置了redis"err := config.Set(key, value,0) // 调用封装好的Set函数if err != nil {c.JSON(500, gin.H{"error": err.Error()})return}name,err := config.Get("name");if err != nil {c.JSON(500, gin.H{"error": err.Error()})return}c.JSON(200, gin.H{"message": "Set success","data":name,})
}
}

文章转载自:

http://gZYOfQYw.yqLrq.cn
http://FOSuhH95.yqLrq.cn
http://yonkEWoe.yqLrq.cn
http://w4tVOTqj.yqLrq.cn
http://etfLs2M2.yqLrq.cn
http://NE7qs0ZT.yqLrq.cn
http://CHsqwJSd.yqLrq.cn
http://2IrLtd1c.yqLrq.cn
http://OqOkAdBr.yqLrq.cn
http://dno6Jojw.yqLrq.cn
http://l1edjmPZ.yqLrq.cn
http://vbQM5FTj.yqLrq.cn
http://SPKpZ870.yqLrq.cn
http://Vwhy7Qgg.yqLrq.cn
http://h8qf5Qzw.yqLrq.cn
http://bAYpLoCB.yqLrq.cn
http://Rbmr4exF.yqLrq.cn
http://B0p1HRM3.yqLrq.cn
http://a6ZyhLl7.yqLrq.cn
http://XsdvKHu9.yqLrq.cn
http://jqHgab1z.yqLrq.cn
http://G34Z0ZdT.yqLrq.cn
http://WG1nXCd5.yqLrq.cn
http://KVKylgwJ.yqLrq.cn
http://d7bc46DD.yqLrq.cn
http://8InEKbF0.yqLrq.cn
http://Ol8gf8hN.yqLrq.cn
http://8GBtZVtC.yqLrq.cn
http://5u8SCStA.yqLrq.cn
http://bNlkbUY2.yqLrq.cn
http://www.dtcms.com/a/373407.html

相关文章:

  • AI提示词(Prompt)基础核心知识点
  • VTK开发笔记(五):示例Cone2,熟悉观察者模式,在Qt窗口中详解复现对应的Demo
  • Excel 表格 - Excel 减少干扰、专注于内容的查看方式
  • Vue3 + Ant Design Vue 全局配置中文指南
  • CSS in JS 的演进:Styled Components, Emotion 等的深度对比与技术选型指引
  • 哈士奇vs网易高级数仓:数据仓库的灵魂是模型、数据质量还是计算速度?| 易错题
  • Windows 命令行:cd 命令2,切换到多级子目录
  • C++ 8
  • GD32入门到实战45--LVGL开发(Code::Blocks)之创建控件
  • 算法题(202):乌龟棋
  • 国产化服务注册与发现工具nacos安装
  • WordPress 性能优化:从插件到 CDN 的全方位缓存设置指南
  • 所有微服务部署都使用一个git地址,并且通过docker部署各个服务的情况下,如何编写mvn指令来处理各个服务。
  • 【AI】乡村振兴计划书:AI智能农业与设备研发销售一体化项目
  • 408 Request Timeout:请求超时,服务器等待客户端发送请求的时间过长。
  • 从车辆中心到用户中心:E/E架构的变革与挑战
  • 基于Mysql+SpringBoot+vue框架-校园商铺管理系统源码
  • SQL MERGE语句实战:高效增量数据处理
  • AI 云再进化,百度智能云新技术与产品全景解读
  • react 面试题 react 有什么特点?
  • PyTorch 模型保存与加载 (速查版)
  • MCU-在SOTA过程中基于TC397的AB-SWAP切换底层原理
  • Python+DRVT 从外部调用 Revit:批量创建带孔洞楼板
  • 如何解决Ubuntu22.04安装Docker后使用Timeshift进行备份非常慢的问题
  • 自适应支撑衣专利拆解:IMU 传感器与线轴引擎的支撑力动态调节机制
  • Linux系统shell脚本(五)
  • 秋招刷题|数据分析岗:Numpy30道核心考点解析
  • 实例分割网络-YOLACT使用
  • PyCharm SSH Autodl
  • 9月8日星期一今日早报简报微语报早读