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 ...
随机推荐
- poll机制实例参考
poll机制:为了减少CPU资源的占用率,在编写驱动函数中添加poll机制 select,poll,epoll都是IO多路复用的机制.I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就 ...
- Android无线测试之—Genymotion配置过程中常见问题
一.前提条件: 已经部署好了Android UiAutomator测试环境. 二.在部署Genymotion时遇到了两类问题: 1.通过eclipse打开一个模拟设备,然后将编译好的jar包push到 ...
- Android开发:《Gradle Recipes for Android》阅读笔记1.7——仓库配置
repositories块告诉gradle哪里去寻找依赖,默认的android studio使用jcenter或者mavenCentral.jcenter仓库位于https://jcenter.bin ...
- JS中的关键字和保留字
JavaScript中不能作为变量名的关键字和保留字总结: 1.js中的关键字: break case catch continue default delete do else finally fo ...
- eval()和exec()函数的区别
(1)eval(str [,globals [,locals ])函数将字符串str当成有效Python表达式来求值,并返回计算结果.(2)exec()函数将字符串str当成有效的Python表达式来 ...
- PHP heredoc 用法
php 中的 heredoc技术是php用来引用字符串的一种方式.在phpwind中巧妙的运用了这个技术,实现了逻辑代码和界面设计的分离. 语法: 1. 使用操作符 “<<<” 2 ...
- JavaScript正则中\1\2的作用
一.示例 1. 验证6个相同的数字 var reg = new RegExp(/^(\d)\1{5}/g); var a = '333333'; if(reg.test(a)) { alert('ri ...
- 作为一名合格的JAVA程序员需要点亮那些技能树?
以下是出现次数超过100的一些技能,大家可以做一个参考. Spring 299 MySQL 290 JavaScript 216Linux 165J2EE 151设计模式 148Struts2 138 ...
- Python3.6全栈开发实例[015]
15.电影投票:程序先给出几个目前正在上映的电影列表. 由用户给每个电影投票.最终将该用户投票信息公布出来 lst = ['北京遇上西雅图', '解救吴先生', '美国往事', '西西里的美丽传说'] ...
- Red Gate系列 - SQL各种工具
Red Gate系列 - SQL各种工具 Red Gate系列文章: Red Gate系列之一 SQL Compare 10.4.8.87 Edition 数据库比较工具 完全破解+使用教程 Red ...