实现

大体上的实现思路是声明了一个用来执行redis命令的cmdable结构体,调用该结构体的process方法就可以执行传入的语句

type cmdable struct {process func(cmd Cmder) error
}

需要传入的cmd是一个Cmder格式的值

type Cmder interface {Name() stringArgs() []interface{}stringArg(int) stringreadReply(rd *proto.Reader) errorsetErr(error)readTimeout() *time.DurationErr() error
}

而process的实现则是

func (c *baseClient) defaultProcess(cmd Cmder) error {for attempt := 0; attempt <= c.opt.MaxRetries; attempt++ {if attempt > 0 {time.Sleep(c.retryBackoff(attempt))}cn, err := c.getConn()if err != nil {cmd.setErr(err)if internal.IsRetryableError(err, true) {continue}return err}err = cn.WithWriter(c.opt.WriteTimeout, func(wr *proto.Writer) error {return writeCmd(wr, cmd)})if err != nil {c.releaseConn(cn, err)cmd.setErr(err)if internal.IsRetryableError(err, true) {continue}return err}err = cn.WithReader(c.cmdTimeout(cmd), func(rd *proto.Reader) error {return cmd.readReply(rd)})c.releaseConn(cn, err)if err != nil && internal.IsRetryableError(err, cmd.readTimeout() == nil) {continue}return err}return cmd.Err()
}

包含了写入命令和读取反馈,可以将捏好的命令输出到redis进行控制

连接redis

type RedisClient struct {addr     stringpassword stringc *redis.Client
}var redisClient *RedisClientfunc InitRedis(cfg *config.AppConfig) error {opts := redis.Options{Addr:        cfg.RedisAddr, //redis地址Password:    cfg.RedisPassword, //密码DialTimeout: time.Second * 5, //超时时间}client := redis.NewClient(&opts) //创建连接if err := client.Ping().Err(); err != nil { //心跳测试return err}redisClient = &RedisClient{ //将连接赋值给全局变量addr:     cfg.RedisAddr,password: cfg.RedisPassword,c:        client,}return nil
}

接口

下列所有方法前需加 RedisClient.c. 来调用,返回值全部都是各种格式的cmd,需要使用各种方法来从中取得我们需要的值

方法 作用 参数
Set 添加kv 键 string, 值 interface{}, 过期时间 time.Duration
Get 获取值 键 string
Del 删除kv 键 …string
HSet 给散列添加kv 散列的键, 散列中的键 string, 值 interface{}
HGet 获取散列kv的值 散列的键, 散列中的键 string
FlushAll 删光
Ping 心跳验证
Exists 确认键是否存在 键 …string
Expire 给key设置过期时间 键 string, 过期时间 time.Duration
Incr 增加键 键 string
Close 关闭连接
Watch 监听键,键出现时执行方法 方法 func(*Tx) error, 键 …string
Decr 值减一 键 string

值获取

方法 返回值
.Err() err
.Result() string,err
.Int64() int64,err

方法使用范例

// Get方法封装
func (this *RedisClient) Get(key string) (string, error) {ret, err := this.c.Get(key).Result()return ret, err
}
// Set方法封装
func (this *RedisClient) Set(key string, val interface{}, ttl time.Duration) error {err := this.c.Set(key, val, ttl).Err()return err
}
// Exists方法封装
func (this *RedisClient) Exists(key string) (bool, error) {v, err := this.c.Exists(key).Result()if err != nil {return false, err}return v > 0, nil
}
// Close关闭连接方法封装
func (this *RedisClient) Close() error {return this.c.Close()
}

上述封装由铭灿提供,感谢杨同志对本文档的鼎力支持

Go-Redis使用手册相关推荐

  1. 转-Redis学习手册(目录)

    为什么自己当初要选择Redis作为数据存储解决方案中的一员呢?现在能想到的原因主要有三.其一,Redis不仅性能高效,而且完全免费.其二,是基于C/C++开发的服务器,这里应该有一定的感情因素吧.最后 ...

  2. phpredis中文手册——《redis中文手册》 php版

    redis中文手册:http://readthedocs.org/docs/redis/en/latest/ 本文是参考<redis中文手册>,将示例代码用php来实现,注意php-red ...

  3. php redis中文手册——《redis中文手册》 php版

    redis中文手册:http://readthedocs.org/docs/redis/en/latest/ 本文是参考<redis中文手册>,将示例代码用php来实现,注意php-red ...

  4. PHP Redis使用手册

    phpredis中文手册--<redis中文手册> php版 redis中文手册:http://readthedocs.org/docs/redis/en/latest/ Redis中文手 ...

  5. phpredis中文手册(使用方法)——《redis中文手册》 php版

    redis中文手册:http://readthedocs.org/docs/redis/en/latest/ 本文是参考<redis中文手册>,将示例代码用php来实现,注意php-red ...

  6. phpredis中文手册《redis中文手册》php版

    本文是参考<redis中文手册>,将示例代码用php来实现,注意php-redis与redis_cli的区别(主要是返回值类型和参数用法). 目录(使用CTRL+F快速查找命令): php ...

  7. php mutile 手册,Redis技术手册 - Lamp资深讲师|lamp小强|linux|php|javascript - OSCHINA - 中文开源技术交流社区...

    Redis技术手册: --------------------------------手册------------------------------- Redis实战手册.pdf Redis学习笔记 ...

  8. redis练习手册redis的配置文件redis.conf介绍

    如果希望使用 redis.conf 启动 redis 需要在启动 redis-server 后加上 redis.conf ,否则会使用默认配置启动 reids ./src/redis-server r ...

  9. Redis学习手册1—数据结构之字符串

    Redis数据结构之字符串 字符串 存储结构 命令 SET命令 改变覆盖规则 GET命令 GETSET命令 MSET命令 MGET命令 MSETNX命令 STRLEN命令 GETRANGE SETRA ...

  10. Redis学习手册(Sorted-Sets数据类型)

    一.概述: Sorted-Sets和Sets类型极为相似,它们都是字符串的集合,都不允许重复的成员出现在一个Set中.它们之间的主要差别是Sorted-Sets中的每一个成员都会有一个分数(score ...

最新文章

  1. 谈谈实现小样本学习的两条路径
  2. php中类的构造函数是,php类与构造函数解析
  3. linux svn 重新定位SVN URL
  4. python作业代码没有缩进严重吗_Python代码需要缩进吗
  5. php 图片 byte数组,php – 将图像存储在PostgreSQL数据库的bytea字段中
  6. java从外部得到数据_java – 如何实现Observer以从侦听器获取数据?
  7. Cat.5e/Cat.6系统测试要点和常见工程问题解答
  8. 数字后端基本概念介绍<site>
  9. java tmp 目录_Tmp目录丢失引发Java进程异常
  10. 基于JavaWEB的学生考勤管理系统
  11. 北大核心期刊目录2020_2020年RCCSE权威、核心期刊目录总览
  12. Canon600D入手记
  13. java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener解决方案
  14. mysql乐观锁 超卖_秒杀系统之超卖现象
  15. STC12驱动PCF8575
  16. 计算机二级java答题演示_全国计算机二级考试高级Office考试操作题
  17. microsoft edge 打开垃圾网页
  18. 系统试运行报告是谁写的_煤矿安全监控系统升级改造验收方案
  19. QT 基于 百度云语音识别, 基于网易API 接口的歌曲查询,的音乐播放器。
  20. 什么叫云原生应用?| 技术头条

热门文章

  1. 装系统提示缺少计算机所需的介质驱动程序,win8系统UEFi安装提示“缺少计算机所需的介质驱动程序”的图文步骤...
  2. iOS使用YYLabel 点击展开和收起全文
  3. quartz 定时任务不运行问题
  4. USB TYPE A B C 引脚定义
  5. 计算机的符号名称大全集,特殊符号大全(标点符号/括号等)
  6. 如何优化内存?Unity中的内存种类;冯乐乐的总结的优化技术
  7. 【模电】0007 有源滤波器2(二阶有源滤低通波器)
  8. 我爱你 php代码怎么打,微信翻译代码我爱你怎么写?微信翻译表白代码介绍大全...
  9. 人工智能/机器学习/深度学习 经典必看书籍【附百度网盘链接】
  10. Python CV2图像鼠标选择任意区域截图