go redis之redigo的使用
作者:General_zy 发布时间:2024-05-22 17:46:37
标签:go,redis,redigo
本文主要介绍了go redis之redigo的使用,分享给大家,具体如下:
安装
go-redis 三方库为我们封装了很多函数来执行 Redis 命令,而 redigo 三方库只有一个 Do 函数执行 Redis 命令,更接近使用 redis-cli 操作 Redis。
go-redis 支持连接哨兵及集群模式的Redis
go get github.com/gomodule/redigo
go get github.com/go-redis/redis/v8
链接Redis
func main() {
c, err := redis.Dial("tcp", "localhost:6379")
if err != nil {
fmt.Println("conn redis failed,", err)
return
}
fmt.Println("redis conn success")
defer c.Close()
}
String类型操作
func main() {
? ? c, err := redis.Dial("tcp", "localhost:6379")
? ? if err != nil {
? ? ? ? fmt.Println("conn redis failed,", err)
? ? ? ? return
? ? }
? ? defer c.Close()
? ? _, err = c.Do("Set", "abc", 100)
? ? if err != nil {
? ? ? ? fmt.Println(err)
? ? ? ? return
? ? }
? ? r, err := redis.Int(c.Do("Get", "abc"))
? ? if err != nil {
? ? ? ? fmt.Println("get abc failed,", err)
? ? ? ? return
? ? }
? ? fmt.Println(r)
}
func main() {
? ? c, err := redis.Dial("tcp", "localhost:6379")
? ? if err != nil {
? ? ? ? fmt.Println("conn redis failed,", err)
? ? ? ? return
? ? }
? ? defer c.Close()
? ? _, err = c.Do("MSet", "abc", 100, "efg", 300)
? ? if err != nil {
? ? ? ? fmt.Println(err)
? ? ? ? return
? ? }
? ? r, err := redis.Ints(c.Do("MGet", "abc", "efg"))
? ? if err != nil {
? ? ? ? fmt.Println("get abc failed,", err)
? ? ? ? return
? ? }
? ? for _, v := range r {
? ? ? ? fmt.Println(v)
? ? }
}
设置过期时间
func main() {
? ? c, err := redis.Dial("tcp", "localhost:6379")
? ? if err != nil {
? ? ? ? fmt.Println("conn redis failed,", err)
? ? ? ? return
? ? }
? ? defer c.Close()
? ? _, err = c.Do("expire", "abc", 10)
? ? if err != nil {
? ? ? ? fmt.Println(err)
? ? ? ? return
? ? }
}
----------------------------
或者这样也行
do, err := client.Do("set", "name", "1111","EX",5)
List操作
func main() {
? ? c, err := redis.Dial("tcp", "localhost:6379")
? ? if err != nil {
? ? ? ? fmt.Println("conn redis failed,", err)
? ? ? ? return
? ? }
? ? defer c.Close()
? ? _, err = c.Do("lpush", "book_list", "abc", "ceg", 300)
? ? if err != nil {
? ? ? ? fmt.Println(err)
? ? ? ? return
? ? }
? ? r, err := redis.String(c.Do("lpop", "book_list"))
? ? if err != nil {
? ? ? ? fmt.Println("get abc failed,", err)
? ? ? ? return
? ? }
? ? fmt.Println(r)
}
Hash表
func main() {
? ? c, err := redis.Dial("tcp", "localhost:6379")
? ? if err != nil {
? ? ? ? fmt.Println("conn redis failed,", err)
? ? ? ? return
? ? }
? ? defer c.Close()
? ? _, err = c.Do("HSet", "books", "abc", 100)
? ? if err != nil {
? ? ? ? fmt.Println(err)
? ? ? ? return
? ? }
? ? r, err := redis.Int(c.Do("HGet", "books", "abc"))
? ? if err != nil {
? ? ? ? fmt.Println("get abc failed,", err)
? ? ? ? return
? ? }
? ? fmt.Println(r)
}
Redis连接池
var pool *redis.Pool ?//创建redis连接池
func init(){
? ? pool = &redis.Pool{ ? ? //实例化一个连接池
? ? ? ? MaxIdle:16, ? ?//最初的连接数量
? ? ? ? // MaxActive:1000000, ? ?//最大连接数量
? ? ? ? MaxActive:0, ? ?//连接池最大连接数量,不确定可以用0(0表示自动定义),按需分配
? ? ? ? IdleTimeout:300, ? ?//连接关闭时间 300秒 (300秒不使用自动关闭) ? ?
? ? ? ? Dial: func() (redis.Conn ,error){ ? ? //要连接的redis数据库
? ? ? ? ? ? return redis.Dial("tcp","localhost:6379")
? ? ? ? },
? ? }
}
func main(){
? ? c := pool.Get() //从连接池,取一个链接
? ? defer c.Close() //函数运行结束 ,把连接放回连接池
? ? ? ? _,err := c.Do("Set","abc",200)
? ? ? ? if err != nil {
? ? ? ? ? ? fmt.Println(err)
? ? ? ? ? ? return
? ? ? ? }
? ? ? ? r,err := redis.Int(c.Do("Get","abc"))
? ? ? ? if err != nil {
? ? ? ? ? ? fmt.Println("get abc faild :",err)
? ? ? ? ? ? return
? ? ? ? }
? ? ? ? fmt.Println(r)
? ? ? ? pool.Close() //关闭连接池
}
来源:https://blog.csdn.net/General_zy/article/details/124831998


猜你喜欢
- 进程是什么?进程就是一个程序在一个数据集上的一次动态执行过程。进程一般由程序、数据集、进程控制块三部分组成。我们编写的程序用来描述进程要完成
- pandas.read_csv参数整理 读取CSV(逗号分割)文件到DataFrame也支持文件的部分导入和选择迭代更多帮助参见:
- js 中判断某个元素是否存在于某个 js 数组中,相当于 php 语言中的 in_array 函数。Array.prototype.S=St
- 通过购物车的一个案列,把vuex学习了一篇。vuex概念浅谈Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储
- 前言最近看到一个有意思的机器学习项目——GFPGAN,他可以将模糊的人脸照片恢复清晰。开源项目的Github地址:https://githu
- 在Web 开发中,JavaScript的一个很重要的作用就是对DOM进行操作,可你知道么?对DOM的操作是非常昂贵的,因为这会导致浏览器执行
- 一:crypto库安装pycrypto,pycryptodome是crypto第三方库,pycrypto已经停止更新三年了,所以不建议安装这
- 所谓天赋(左脑和右脑)也就是你是否有艺术天赋,天赋也许是存在的,这主要在于人类左右脑的分工。左脑主要负责逻辑理解、语言、判断、分类、分析、推
- 本文实例讲述了JS实现带鼠标效果的头像及文章列表代码。分享给大家供大家参考。具体如下:这是一种带图片功能的文章或新闻列表功能,鼠标滑过标题列
- w3c range range 用来表示用户的选择区域,这块选择区域由两个边界位置界定,而位置则由其容器以及偏移量构成,称作 contain
- Pattern.split方法详解/** * 测试Pattern.split方法 */ @Test public void testPatt
- 目录1. 需求是怎么来的2. 以不变应万变,是变也3. 最大限度地少改动4.对带参数的函数使用装饰器5. 给装饰器参数6.带类参数的装饰器7
- 正文开始if name == "main":可以看成是python程序的入口,就像java中的main()方法,但不完全
- 这篇文章主要介绍了PyQt5 closeEvent关闭事件退出提示框原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的
- 废话不多说,直接上代码!@if ($user->id !== Auth::user()->id)<div id="
- 目录1. 理解 * 和 ** 2.Python函数的参数 3. 支持任意参数的函数
- 在编程时你一定碰到过时间触发的事件,在VB中有timer控件,而ASP中没有,假如你要不停地查询数据库来等待一个返回结果的话,我想你一定知道
- 近来看论坛上经常有人提问关于如何无刷新,自动更新数据.传统上,我们浏览网页,如果加入最新的数据.只能是等我们重新向服务器端请求时才能显示出来
- 当前的实践中问题在项目之间依赖的时候我们往往可以通过mock一个接口的实现,以一种比较简洁、独立的方式,来进行测试。但是在mock使用的过程
- #!/usr/bin/env pythonimport sysfrom PyQt4 import QtGui,QtCoreimport ht