10.2 Go redis

redis是NoSQL数据, 不是传统的关系型数据库。linux,windows环境皆可安装。

https://redis.io
http://www.redis.cn

redis(Remote Dictionary Server)远程字典服务器,性能非常高,单机15W QPS,适合缓存,持久化数据。

1.1. Go操作redis

使用第三方开源的 redis 库: github.com/garyburd/redigo/redis

go get github.com/garyburd/redigo/redis

获取、设置redis的key-value

string类型

package main

import (
"fmt"
"github.com/garyburd/redigo/redis"
) func main() {
conn, err := redis.Dial("tcp", "127.0.0.1:6379")
if err != nil {
fmt.Println("连接redis出错,", err)
return
} defer conn.Close()
//连接redis,写入数据 string
res, err := conn.Do("Set", "name", "alexdsb")
if err != nil {
fmt.Println("写入数据出错,", err)
return
}
fmt.Println(res) //读取redis数据
data, err := redis.String(conn.Do("Get", "name"))
if err != nil {
fmt.Println("读取数据出错,", err)
return
}
fmt.Println("读取出redis数据:", data)
}

Go操作redis hash类型

127.0.0.1:6379> HSET key field value

package main

import (
"fmt"
"github.com/garyburd/redigo/redis"
) func main() {
conn, err := redis.Dial("tcp", "127.0.0.1:6379")
if err != nil {
fmt.Println("连接redis出错,", err)
return //如果函数异常,直接退出
}
//函数推出前,关闭redis连接
defer conn.Close() //写入hash类型数据
//写入哈希类型,新闻01,标题
_, err = conn.Do("HSet", "news01", "title", "golang")
if err != nil {
fmt.Println("HSet err:", err)
return //如果函数异常,直接退出
} //写入哈希类型,新闻01,内容
_, err = conn.Do("HSet", "news01", "content", "life is short ,i use golang")
if err != nil {
fmt.Println("HSet err:", err)
return //如果函数异常,直接退出
} //读取hash数据类型
data, err := redis.String(conn.Do("HGet", "news01", "title"))
if err != nil {
fmt.Println("HGet err:", err)
return
}
fmt.Println("HGet data is :", data)
//读取hash数据类型
d2, err := redis.String(conn.Do("HGet", "news01", "content"))
if err != nil {
fmt.Println("HGet err:", err)
return
}
fmt.Println("HGet data is :", d2)
}

go操作redis,hash类型,写入多个field-value

127.0.0.1:6379> HMSET key field value [field value ...]

package main

import (
"fmt"
"github.com/garyburd/redigo/redis"
) func main() {
conn, err := redis.Dial("tcp", "127.0.0.1:6379")
if err != nil {
fmt.Println("连接redis出错,", err)
return //如果函数异常,直接退出
} //函数推出前,关闭redis连接
defer conn.Close() //写入多个字段
_, err = conn.Do("HMSet", "news02", "title", "gogogogogogog", "content", "pypypypypypy")
if err != nil {
fmt.Println("HMSet err:", err)
return
} ////读取多个数据
data, err := redis.Strings(conn.Do("HMGet", "news02", "title", "content"))
if err != nil {
fmt.Println("HMGet err:", err)
return
}
//for i, v := range data {
// fmt.Printf("data[%d]=%s\n", i, v)
//} fmt.Println(data)
}

设置redis数据过期时间

package main

import (
"fmt"
"github.com/garyburd/redigo/redis"
) func main() {
conn, err := redis.Dial("tcp", "127.0.0.1:6379")
if err != nil {
fmt.Println("连接redis出错,", err)
return //如果函数异常,直接退出
}
defer conn.Close()
//给redis的key设置过期时间,必选保证key存在!!
res, err := conn.Do("expire", "age2", 20)
if err != nil {
fmt.Println(err)
return
} fmt.Println(res) //data, err := redis.String(conn.Do("Get", "age2"))
//if err != nil {
// fmt.Println(err)
//}
//fmt.Println(data)
}

golang操作redis的list

package main

import (
"fmt"
"github.com/garyburd/redigo/redis"
) func main() {
conn, err := redis.Dial("tcp", "127.0.0.1:6379")
if err != nil {
fmt.Println("连接redis出错,", err)
return //如果函数异常,直接退出
} //go操作list
//注意坑,这里不能再次写入,数据追加写入队列
_, err = conn.Do("lpush", "duilie", "alex", "wupeiqi", "wenzhou", "大西瓜")
if err != nil {
fmt.Println(err)
return
} data, err := redis.Strings(conn.Do("lrange", "duilie", "0", "-1"))
if err != nil {
fmt.Println(err)
return
}
fmt.Println(data)
}

1.2. redis链接池

1.初始化一定数量的链接放入到链接池

2.go需要操作redis时,直接从链接池取出链接

3.节省临时获取redis链接的时间,提高效率

package main

import (
"fmt"
"github.com/garyburd/redigo/redis"
) //全局变量类型声明
var pool *redis.Pool //初始化函数,进行链接池初始化
func init() {
//redis.pool结构体中提供了参数用法
pool = &redis.Pool{
MaxIdle: 8, //最大空闲链接数
MaxActive: 0, //保持链接数,0是没限制
IdleTimeout: 100, //最大空闲时间
//初始化连接的代码,匿名函数
Dial: func() (redis.Conn, error) {
return redis.Dial("tcp", "127.0.0.1:6379")
},
}
} func main() {
//从pool中取出一个链接
conn := pool.Get()
defer conn.Close() //设置redis数据
_, err := conn.Do("set", "name", "大狗子")
if err != nil {
fmt.Println(err)
return
}
//取出redis数据
data, err := redis.String(conn.Do("get", "name"))
if err != nil {
fmt.Println(err)
return
}
fmt.Println(data) //想要从pool取出redis连接,必须保证链接池没关闭
//pool.Close() //关闭Pool池后,就无法取出redis链接了
conn2 := pool.Get()
_, err = conn2.Do("Set", "name2", "大狗子222")
if err != nil {
fmt.Println(err)
return
} //取出数据
//取出redis数据
data2, err := redis.String(conn.Do("get", "name2"))
if err != nil {
fmt.Println(err)
return
}
fmt.Println(data2)
}

10.2 Go redis的更多相关文章

  1. Win10 + Nginx 1.10 + PHP 7 + Redis 配置方法

    软件包版本 软件 版本 - 链接 - Nginx nginx-x32-1.10.2.zip 下载 PHP php-7.0.12-nts-Win32-VC14-x64 下载 Redis php_redi ...

  2. redis实战笔记(10)-第10章 扩展Redis

    本章主要内容   扩展读性能 扩展写性能以及内存容量 扩展复杂的查询   随着Redis的使用越来越多, 只使用一台Redis服务器没办法存储所有数据或者没办法处理所有读写请求的问题迟早都会出现, 这 ...

  3. Win 10下安装 Redis

    目录 写在前面 一.安装环境 二.下载windows版本的Redis 三.安装Redis 四.安装服务 五.启动服务 六.测试Redis 七.常用的Redis服务. 写在前面 Redis 是一个开源使 ...

  4. 10.27-Redis-mz 深入浅出Redis

    深入浅出Redis 1.Redis的发展史     Redis[Remote Directory Server]:远程服务器字典 2.下载安装Redis 1>Linux下安装Reids     ...

  5. 10分钟快速入门Redis

    Redis安装 来源:https://github.com/jaywcjlove/handbook 官方编译安装 $ wget http://download.redis.io/releases/re ...

  6. 10.Redis分布式集群

    10.Redis分布式集群10.1 数据分布10.1.1 数据分布理论10.1.2 Redis数据分区10.1.3 集群功能限制10.2 搭建集群10.2.1 准备节点10.2.2 节点握手10.2. ...

  7. Redis(二)CentOS7安装Redis4.0.10与集群搭建

    一 Redis单机安装 1 Redis下载安装 1.1 检查依赖环境(Redis是C语言开发,编译依赖gcc环境) [root@node21 redis-]$ gcc -v -bash: gcc: c ...

  8. swoole1.8.0+版本异步redis安装(本实例为swoole1.8.10版本)详解

    Swoole-1.8.0+版本增加了对异步Redis客户端的支持,基于redis官方提供的hiredis库实现.Swoole提供了__call魔术方法,来映射绝大部分Redis指令(本次安装实例为sw ...

  9. 10万用户一年365天的登录情况如何用redis存储,并快速检索任意时间窗内的活跃用户

    1.redsi的bitmap数据结构介绍 bitmap本质上是一个string类型,只是他操作的是string的某个位是0还是1. setbit和getbit 两条命令是对字符串的位操作.每个位只能是 ...

随机推荐

  1. innobackupex 出现Unrecognized character \x01; marked by

    centos 7.2 mysql 5.7.16 innobackupex version 2.4.6 [root@Devops-mysql-150-115 sh]# innobackupex --de ...

  2. HyperLeger Fabric开发(三)——HyperLeger Fabric架构

    HyperLeger Fabric开发(三)--HyperLeger Fabric架构 一.HyperLeger Fabric逻辑架构 1.HyperLeger Fabric逻辑架构简介 Fabric ...

  3. Python-四则运算-蔡晓晴,杜婷萱

    github链接:https://github.com/Amy-CC/Arithmetic-Operation 一.需求 1.使用-n 参数控制生成题目的个数 2.使用-r 参数控制题目中数值(自然数 ...

  4. SQL语句学习(一)

    这篇文章用来记录再学习SQL语句的过程. 首先,我们从简单的创建表开始.创建表的语法是CREATE TABLE 表名(列1的名字  列1的属性,列2的名字  列2的属性...); 如果希望将某一列作为 ...

  5. 数学--数论--HDU-2698 Maximum Multiple(规律)

    Given an integer nn, Chiaki would like to find three positive integers xx, yy and zzsuch that: n=x+y ...

  6. CodeForces - 262B

    Roma works in a company that sells TVs. Now he has to prepare a report for the last year. Roma has g ...

  7. 在Jetson TX2上安装OpenCV(3.4.0)

    参考文章:How to Install OpenCV (3.4.0) on Jetson TX2 与参考文章大部分都是相似的,如果不习惯看英文,可以看看我下面的描述 在我们使用python3进行编程时 ...

  8. 深度优先搜索理论基础与实践(java)

    概论 深度优先搜索属于图算法的一种,是一个针对图和树的遍历算法,英文缩写为 DFS 即 Depth First Search.深度优先搜索是图论中的经典算法,利用深度优先搜索算法可以产生目标图的相应拓 ...

  9. 纯django开发最完美博客

    2020年5月打造最时尚博客系统教程 为了学习速度,集中精力学习django和博客开发, 没有使用其它框架,也没有使用css预处理等 这样学起来最方便, 博客前后端都完成, www.duanshuil ...

  10. SaltStack漏洞导致的挖矿排查思路

    描述 SaltStack是一套C/S架构的运维工具,服务端口默认为4505/4506,两个端口如果对外网开放危害非常大,黑客利用SaltStack的远程命令执行漏洞CVE-2020-11651可以直接 ...