10.2 Go redis
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的更多相关文章
- 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 ...
- redis实战笔记(10)-第10章 扩展Redis
本章主要内容 扩展读性能 扩展写性能以及内存容量 扩展复杂的查询 随着Redis的使用越来越多, 只使用一台Redis服务器没办法存储所有数据或者没办法处理所有读写请求的问题迟早都会出现, 这 ...
- Win 10下安装 Redis
目录 写在前面 一.安装环境 二.下载windows版本的Redis 三.安装Redis 四.安装服务 五.启动服务 六.测试Redis 七.常用的Redis服务. 写在前面 Redis 是一个开源使 ...
- 10.27-Redis-mz 深入浅出Redis
深入浅出Redis 1.Redis的发展史 Redis[Remote Directory Server]:远程服务器字典 2.下载安装Redis 1>Linux下安装Reids ...
- 10分钟快速入门Redis
Redis安装 来源:https://github.com/jaywcjlove/handbook 官方编译安装 $ wget http://download.redis.io/releases/re ...
- 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. ...
- Redis(二)CentOS7安装Redis4.0.10与集群搭建
一 Redis单机安装 1 Redis下载安装 1.1 检查依赖环境(Redis是C语言开发,编译依赖gcc环境) [root@node21 redis-]$ gcc -v -bash: gcc: c ...
- swoole1.8.0+版本异步redis安装(本实例为swoole1.8.10版本)详解
Swoole-1.8.0+版本增加了对异步Redis客户端的支持,基于redis官方提供的hiredis库实现.Swoole提供了__call魔术方法,来映射绝大部分Redis指令(本次安装实例为sw ...
- 10万用户一年365天的登录情况如何用redis存储,并快速检索任意时间窗内的活跃用户
1.redsi的bitmap数据结构介绍 bitmap本质上是一个string类型,只是他操作的是string的某个位是0还是1. setbit和getbit 两条命令是对字符串的位操作.每个位只能是 ...
随机推荐
- thinkphp5 --接口实例
这是我自己构思的案例,写的不好请多多指教. 后台接口的代码: public function index() { $res = array(); header("Access-Control ...
- bootstrop日历
https://blog.csdn.net/cuixiaobo521/article/details/77880633
- Scala教程之:函数式的Scala
文章目录 高阶函数 强制转换方法为函数 方法嵌套 多参数列表 样例类 比较 拷贝 模式匹配 密封类 单例对象 伴生对象 正则表达式模式 For表达式 Scala是一门函数式语言,接下来我们会讲一下几个 ...
- XEP-0198:流管理
------------恢复内容开始------------ 原文来自:https://xmpp.org/extensions/xep-0198.html,只翻译了技术方面的内容. 摘要:这个规范定义 ...
- 阿里大牛带你深入分析spring事务传播行为
spring框架封装了很多有用的功能和组件,便于在项目开发中快速高效的调用,其中spring的事务使用非常简单,只需要在用到事务的地方加一行注解即可: 1@Transactional 但越是看起来简单 ...
- Golang Context 的原理与实战
本文让我们一起来学习 golang Context 的使用和标准库中的Context的实现. golang context 包 一开始只是 Google 内部使用的一个 Golang 包,在 Gola ...
- 什么才是Python的高级编程?大牛总结,绝对让你受益匪浅
很多刚入门或者还在了解的小伙伴们都会遇到迷茫期吧,就是学完这些基础,函数,字典啥的,好像也做不了什么东西,其实你基础学的扎实的话,是能做很多的事的,学完基础也不要迷茫,因为每门语言都是博大精深的,不是 ...
- php接口开发经验总结
接口开发采用jwt方式验证: 接口开发最好留多几个返回方式,方便本地调用: 待更新.............
- [hdu4576]dp
题意:1-n围成1圈,从1出发,第i次走a[i]步,问走m次后出现在[L,R]的概率L<=R. 思路:明显的DP,把编号变成0~n-1,令dp[i][j]表示走完i步之前停在了j上,则有dp[i ...
- [Selenium] 自动侦测浏览器版本并下载对应的浏览器驱动
昨天在群里聊天时,有同学说 Appium 官方支持自动下载兼容的浏览器驱动,想来Selenium也有类似的方法,于是在网上搜索一番.参考了Medium上一篇文章的方法,对步骤进行改进,增加了对多浏览器 ...