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 ...
随机推荐
- MTK驱动探索:mtk6582添加tp驱动s3203
代码从mtk6589平台移植,ic为用户定制. 解决的问题有: 一.build err:主要原因是89和82平台函数和宏定义冲突,如: extern void mt_eint_unmask(unsig ...
- 1501: 货币系统(money)
1501: 货币系统(money) 时间限制: 1 Sec 内存限制: 64 MB 提交: 33 解决: 12 [提交][状态][讨论版] 题目描述 母牛们不但创建了它们自己的政府,而且选择建立了 ...
- 【BZOJ1449/2895】[JSOI2009]球队收益/球队预算 最小费用最大流
[BZOJ2895]球队预算 Description 在一个篮球联赛里,有n支球队,球队的支出是和他们的胜负场次有关系的,具体来说,第i支球队的赛季总支出是Ci*x^2+Di*y^2,Di<=C ...
- 导出excel页面假死
如果是asp.net页面 public override void VerifyRenderingInServerForm(Control control) {} 如果是Sharepoint w ...
- 1084 矩阵取数问题 V2
1084 矩阵取数问题 V2 基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 一个M*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,先从左上走到右下 ...
- SharePoint服务器端对象模型 之 访问文件和文件夹(Part 4)
(四)列表附件 列表的附件也是文件系统的一部分,它依附于普通列表的列表条目之上(文档库没有附件),它的操作在一些地方和文档库中文档的操作非常类似. 1.附件的读取 一个列表条目的附件可以使用SPL ...
- sqlbulk的问题
今天在bulk的时候遇到一个很“奇怪”的问题 无论怎样修改传入的值,也会报类型转换的错误.后来 在此文中找到了正解 bbs.csdn.net/topics/390430064 SqlBulkCopy不 ...
- 【python】-- Django Form
Django Form Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容(自定义样式) 一.F ...
- 分界线<hr/>
<hr align="center" noshade="noshade" width="90px" color="#1DAB ...
- Qt里的原子操作QAtomicInteger
所谓原子操作,即一系列复杂的操作能一气呵成,中间不被其他的操作打断.这在多线程程序中尤其常见,但要实现这种功能,既要考虑程序的良好设计,又要关心特定平台的体系结构和相关编译器对原子特性的支持程度.所以 ...