redigo库来实现redis的操作:https://github.com/gomodule/redigo

Redis常用操作

示例代码:

package main

import (
"github.com/gomodule/redigo/redis"
"fmt"
"time"
) func initRedis() (dial redis.Conn, err error) {
dial, err = redis.Dial("tcp", "172.16.65.183:30001")
if err != nil {
panic(err)
}
return dial, nil
} func testSetGet(dial redis.Conn) {
// 设置一个Key和value
dial.Do("set", "abc", "this is a test") // 设置过期时间
dial.Do("expire", "abc", ) // 读取指定key的value
reply, err := dial.Do("get", "abc")
str, err := redis.String(reply, err)
if err != nil {
panic(err)
}
fmt.Println(str)
} func testHSetGet(dial redis.Conn) {
key := "abc"
value := "this is a book test" // 设置一个hash表来存储
reply, err := dial.Do("hset", "books", key, value)
if err != nil {
panic(err)
}
fmt.Println(reply)
reply2, err := dial.Do("hget", "books", key)
str, err := redis.String(reply2, err)
if err != nil {
panic(err)
}
fmt.Println(str)
} func testMSetGet(dial redis.Conn) {
key := "abc"
value := "this is a test book"
key2 := "golang"
value2 := "this is a golang book" // 一次设置多个key
dial.Do("mset", "books", key, value, key2, value2)
str, err := redis.Strings(dial.Do("mget", "books",key, key2))
if err != nil {
panic(err)
}
fmt.Println(str)
} func main() {
dial, _ := initRedis()
testSetGet(dial)
testHSetGet(dial)
testMSetGet(dial) time.Sleep( * time.Second)
reply, err := dial.Do("get", "abc")
str, err := redis.String(reply, err)
if err != nil {
panic(err)
}
fmt.Println("get abc", str) defer dial.Close()
}

Redis连接池

连接池使用场景

对于一些大对象,或者初始化过程较长的可复用的对象,我们如果每次都new对象出来,那么意味着会耗费大量的时间。

我们可以将这些对象缓存起来,当接口调用完毕后,不是销毁对象,当下次使用的时候,直接从对象池中拿出来即可。

示例代码:

package main

import (
"github.com/gomodule/redigo/redis"
"time"
"fmt"
) func initRedisPool(serverAddr string, passwd string) (pool *redis.Pool) {
pool = &redis.Pool{
MaxIdle: ,
MaxActive: ,
IdleTimeout: * time.Second,
Dial: func() (redis.Conn, error) {
conn, err := redis.Dial("tcp", serverAddr)
if err != nil {
return nil, err
}
if len(passwd) > {
_, err := conn.Do("auth", passwd)
if err != nil {
return nil, err
}
}
return conn, nil
},
TestOnBorrow: func(c redis.Conn, t time.Time) error {
if time.Since(t) < time.Minute {
return nil
}
_, err := c.Do("ping")
return err
},
}
return pool
} func testRedisPool() {
redisPool := initRedisPool("172.16.65.181:30001", "")
// 获取一个redis连接
conn := redisPool.Get() key := "name"
value := "golang"
conn.Do("hset", "books", key, value)
val, err := redis.String(conn.Do("hget", "books", key))
if err != nil {
panic(err)
}
conn.Close()
fmt.Println(val)
} func main() {
testRedisPool()
}

Go Redis 开发的更多相关文章

  1. ASP.NET Redis 开发

    文件并发(日志处理)--队列--Redis+Log4Net Redis简介 Redis是一个开源的,使用C语言编写,面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高 ...

  2. ASP.NET c# Redis 开发

    Redis简介 Redis是一个开源的,使用C语言编写,面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高并发的应用场景.Redis纯粹为应用而产生,它是一个高性能的 ...

  3. ASP.NET Redis 开发 入门

    ASP.NET Redis 开发   文件并发(日志处理)--队列--Redis+Log4Net Redis简介 Redis是一个开源的,使用C语言编写,面向“键/值”对类型数据的分布式NoSQL数据 ...

  4. Redis开发与运维:SDS

    STRING 我们会经常打交道的string类型,在redis中拥有广泛的使用.也是开启redis数据类型的基础. 在我最最开始接触的redis的时候,总是以为字符串类型就是值的类型是字符串. 比如: ...

  5. Redis开发与运维学习笔记

    <Redis开发与运维>读书笔记   一.初始Redis 1.Redis特性与优点 速度快.redis所有数据都存放于内存:是用C语言实现,更加贴近硬件:使用了单线程架构,避免了多线程竞争 ...

  6. 完整阿里云Redis开发规范

    完整阿里云Redis开发规范 原文地址 本文主要介绍在使用阿里云Redis的开发规范,从下面几个方面进行说明. 键值设计 命令使用 客户端使用 相关工具 删除bigkey 通过本文的介绍可以减少使用R ...

  7. redis开发使用规范

    redis开发使用规范 1.冷热数据分离,不要将所有数据全部都放在Redis中 根据业务只将高频热数据存储到Redis中[QPS大于5000],对于低频冷数据可以使用mysql等基于磁盘的存储方式. ...

  8. 在windows环境里,用Docker搭建Redis开发环境(新书第一个章节)

    大家都知道高并发分布式组件的重要性,而且如果要进大厂,这些技术不可或缺.但这些技术的学习难点在于,大多数项目里的分布式组件,都是搭建在Linux系统上,在自己的windows机器上很难搭建开发环境,如 ...

  9. 《Redis开发与运维》

    第1章 初识Redis 1. Redis介绍: Redis是一种基于键值对(key-value)的NoSQL数据库. 与很多键值对数据库不同的是,Redis中的值可以是由string(字符串).has ...

  10. 阿里云 Redis 开发规范

    阿里云Redis开发规范-阿里云开发者社区 https://developer.aliyun.com/article/531067 https://mp.weixin.qq.com/s/UWE1Kx6 ...

随机推荐

  1. mongo-connector来同步mongo

    个人博客:https://blog.sharedata.info/ 最近需要做mongo之间的同步,因此还是选择之前的工具mongo-connectorgitHub文档:https://github. ...

  2. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)2.3——用Eclipse ADT导出App

    问题: 想在一个已经存在的Eclipse ADT的项目中使用Gradle 解决方案: Eclipse ADT插件可以帮助生成Gradle文件 讨论: Eclipse的ADT插件是在2013年推出Gra ...

  3. Swift学习笔记(一):No such module 'Cocoa'

    在xcode中创建一个Playground文件, 进行导包操作 ,import Cocoa 却提示No such module 'Cocoa' 原因是该Playground文件的platform 设置 ...

  4. 关于spring MVC中加载多个validator的方法。

    首先讲下什么叫做validator: validator是验证器,可以验证后台接受的数据,对数据做校验. SpringMVC服务器验证有两种方式,一种是基于Validator接口,一种是使用Annot ...

  5. codevs2894、2837、1669、2503、3231

    6.25动态规划之背包回顾 2894 Txx考试  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description Txx是一个 ...

  6. JS将秒转换为 天

    function SecondToDate(msd) {             var time =msd             if (null != time && " ...

  7. 问题:Unable to find a 'userdata.img' file for ABI armeabi to copy into the AVD folder.

    创建AVD时,发现创建不成功,报错“Unable to find a 'userdata.img' file for ABIarmeabi to copy into the AVD folder.” ...

  8. ASP-Server.Transfer-Response.Redirect

    Server.Transfer Transfer 方法把一个 ASP 文件中创建的所有状态信息(所有 application/session 变量以及所有 request 集合中的项目)发送(传输)到 ...

  9. 解决Mysql报错缺少libaio.so.1

    解决Mysql报错缺少libaio.so.1 报错如上图,需要安装libaio.so.1 64位系统安装: wget http://mirror.centos.org/centos/6/os/x86_ ...

  10. GDI+的应用

    在VS中创建窗体 (1)CDI+清除绘画面 在窗体中写入代码: protected override void OnPaint(PaintEventArgs e){ Graphics g=e.Grap ...