Go Redis 开发
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 开发的更多相关文章
- ASP.NET Redis 开发
文件并发(日志处理)--队列--Redis+Log4Net Redis简介 Redis是一个开源的,使用C语言编写,面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高 ...
- ASP.NET c# Redis 开发
Redis简介 Redis是一个开源的,使用C语言编写,面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高并发的应用场景.Redis纯粹为应用而产生,它是一个高性能的 ...
- ASP.NET Redis 开发 入门
ASP.NET Redis 开发 文件并发(日志处理)--队列--Redis+Log4Net Redis简介 Redis是一个开源的,使用C语言编写,面向“键/值”对类型数据的分布式NoSQL数据 ...
- Redis开发与运维:SDS
STRING 我们会经常打交道的string类型,在redis中拥有广泛的使用.也是开启redis数据类型的基础. 在我最最开始接触的redis的时候,总是以为字符串类型就是值的类型是字符串. 比如: ...
- Redis开发与运维学习笔记
<Redis开发与运维>读书笔记 一.初始Redis 1.Redis特性与优点 速度快.redis所有数据都存放于内存:是用C语言实现,更加贴近硬件:使用了单线程架构,避免了多线程竞争 ...
- 完整阿里云Redis开发规范
完整阿里云Redis开发规范 原文地址 本文主要介绍在使用阿里云Redis的开发规范,从下面几个方面进行说明. 键值设计 命令使用 客户端使用 相关工具 删除bigkey 通过本文的介绍可以减少使用R ...
- redis开发使用规范
redis开发使用规范 1.冷热数据分离,不要将所有数据全部都放在Redis中 根据业务只将高频热数据存储到Redis中[QPS大于5000],对于低频冷数据可以使用mysql等基于磁盘的存储方式. ...
- 在windows环境里,用Docker搭建Redis开发环境(新书第一个章节)
大家都知道高并发分布式组件的重要性,而且如果要进大厂,这些技术不可或缺.但这些技术的学习难点在于,大多数项目里的分布式组件,都是搭建在Linux系统上,在自己的windows机器上很难搭建开发环境,如 ...
- 《Redis开发与运维》
第1章 初识Redis 1. Redis介绍: Redis是一种基于键值对(key-value)的NoSQL数据库. 与很多键值对数据库不同的是,Redis中的值可以是由string(字符串).has ...
- 阿里云 Redis 开发规范
阿里云Redis开发规范-阿里云开发者社区 https://developer.aliyun.com/article/531067 https://mp.weixin.qq.com/s/UWE1Kx6 ...
随机推荐
- mongo-connector来同步mongo
个人博客:https://blog.sharedata.info/ 最近需要做mongo之间的同步,因此还是选择之前的工具mongo-connectorgitHub文档:https://github. ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)2.3——用Eclipse ADT导出App
问题: 想在一个已经存在的Eclipse ADT的项目中使用Gradle 解决方案: Eclipse ADT插件可以帮助生成Gradle文件 讨论: Eclipse的ADT插件是在2013年推出Gra ...
- Swift学习笔记(一):No such module 'Cocoa'
在xcode中创建一个Playground文件, 进行导包操作 ,import Cocoa 却提示No such module 'Cocoa' 原因是该Playground文件的platform 设置 ...
- 关于spring MVC中加载多个validator的方法。
首先讲下什么叫做validator: validator是验证器,可以验证后台接受的数据,对数据做校验. SpringMVC服务器验证有两种方式,一种是基于Validator接口,一种是使用Annot ...
- codevs2894、2837、1669、2503、3231
6.25动态规划之背包回顾 2894 Txx考试 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description Txx是一个 ...
- JS将秒转换为 天
function SecondToDate(msd) { var time =msd if (null != time && " ...
- 问题: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.” ...
- ASP-Server.Transfer-Response.Redirect
Server.Transfer Transfer 方法把一个 ASP 文件中创建的所有状态信息(所有 application/session 变量以及所有 request 集合中的项目)发送(传输)到 ...
- 解决Mysql报错缺少libaio.so.1
解决Mysql报错缺少libaio.so.1 报错如上图,需要安装libaio.so.1 64位系统安装: wget http://mirror.centos.org/centos/6/os/x86_ ...
- GDI+的应用
在VS中创建窗体 (1)CDI+清除绘画面 在窗体中写入代码: protected override void OnPaint(PaintEventArgs e){ Graphics g=e.Grap ...