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 ...
随机推荐
- Laragon集成开发环境+配置Xdebug+postman运行Xdebug
[ Laravel 5.5 文档 ] 快速入门 —— 使用 Laragon 在 Windows 中搭建 Laravel 开发环境:http://laravelacademy.org/post/7754 ...
- LeetCode: Validate Binary Search Tree [098]
[题目] Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defin ...
- Linux下用户管理、目录结构
linux的文件系统是采用层级式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录. 目录介绍: / root,存放root用户的相关文件 home,存放普通用户的相关文 ...
- 利用Lucene将被索引文件目录中的所有文件建立索引
1.新建两个文件夹htm和index,其中htm中存放被索引的文件,index文件中存放建立的索引文件. 2.新建解析目录中所有文件的类,用来解析指定目录下的所有文件. import java.io. ...
- ios如何在当前工程中添加编辑新建的FramesWork
本文转载至 http://www.apkbus.com/android-131519-1-1.html,感谢原文作者的分享. naniboy 该用户从未签到 可能很多大牛都见过FaceBo ...
- TP数据删除
[数据删除及执行原生sql语句] delete() 返回受影响的记录条数 $goods -> delete(30); 删除主键值等于30的记录信息 $goods -> delete( ...
- LeetCode Problem 9:Palindrome Number回文数
描述:Determine whether an integer is a palindrome. Do this without extra space. Some hints: Could nega ...
- 【BZOJ2730】[HNOI2012]矿场搭建 Tarjan
[BZOJ2730][HNOI2012]矿场搭建 Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处. ...
- 导出excel页面假死
如果是asp.net页面 public override void VerifyRenderingInServerForm(Control control) {} 如果是Sharepoint w ...
- 项目中调用ExcelCom组件时的配置流程
异常提示如下: Microsoft Office Excel 不能访问文件“*.xls”. 可能的原因有: 1 文件名称或路径不存在. 2 文件正被其他程序使 ...