在Go语言中基础的Redis操作
在Go语言中基础的Redis操作
需要先安装 redigo
go get "github.com/garyburd/redigo/redis"
Go语言Redis客户端的简单示例
连接池 POOL
为了和redis建立连接,需要创建一个redis.Pool的对象
func newPool() *redis.Pool {
return &redis.Pool{
MaxIdle: 10,
MaxActive: 12000,
Dial: func() (redis.Conn, error) {
c, err := redis.Dial("tcp", ":6379")
if err != nil {
panic(err)
}
return c, err
},
}
}
测试连接 PING
如果想测试是否连接成功,可以使用 PING 命令
func ping(c redis.Conn) error {
pong, err := c.Do("PING")
if err != nil {
return err
}
s, err := redis.String(pong, err)
if err != nil {
return err
}
fmt.Printf("PING Response = %s\n", s)
return nil
}
SET
func set(c redis.Conn) error {
_, err := c.Do("SET", "Favorite Movie", "Repo Man")
if err != nil {
return err
}
_, err = c.Do("SET", "Release Year", 1984)
if err != nil {
return err
}
return nil
}
GET
func get(c redis.Conn) error {
key := "Favorite Movie"
s, err := redis.String(c.Do("GET", key))
if err != nil {
return err
}
fmt.Printf("%s = %s\n", key, s)
key = "Release Year"
i, err := redis.Int(c.Do("GET", key))
if err != nil {
return err
}
fmt.Printf("%s = %d\n", key, i)
key = "Nonexistent Key"
s, err = redis.String(c.Do("GET", key))
if err == redis.ErrNil {
fmt.Printf("%s does not exist\n", key)
} else if err != nil {
return err
} else {
fmt.Printf("%s = %s\n", key, s)
}
return nil
}
SET STRUCT
func setStruct(c redis.Conn) error {
const objectPrefix string = "user:"
user := User{
Username: "coderminer.com",
MobileID: "12345678941",
Email: "kevin@163.com",
FirstName: "coderminer.com",
LastName: "coderminer.com",
}
json, err := json.Marshal(user)
if err != nil {
return err
}
_, err = c.Do("SET", objectPrefix+user.Username, json)
if err != nil {
return err
}
return nil
}
GET STRUCT
func getStruct(c redis.Conn) error {
const objectPrefix string = "user:"
username := "coderminer.com"
s, err := redis.String(c.Do("GET", objectPrefix+username))
if err == redis.ErrNil {
fmt.Println("User does not exist")
} else if err != nil {
return err
}
user := User{}
err = json.Unmarshal([]byte(s), &user)
fmt.Printf("%+v\n", user)
return nil
}
最终的代码
package main
import (
"encoding/json"
"fmt"
"github.com/garyburd/redigo/redis"
)
type User struct {
Username string
MobileID string
Email string
FirstName string
LastName string
}
func newPool() *redis.Pool {
return &redis.Pool{
MaxIdle: 10,
MaxActive: 12000,
Dial: func() (redis.Conn, error) {
c, err := redis.Dial("tcp", ":6379")
if err != nil {
panic(err)
}
return c, err
},
}
}
func ping(c redis.Conn) error {
pong, err := c.Do("PING")
if err != nil {
return err
}
s, err := redis.String(pong, err)
if err != nil {
return err
}
fmt.Printf("PING Response = %s\n", s)
return nil
}
func set(c redis.Conn) error {
_, err := c.Do("SET", "Favorite Movie", "Repo Man")
if err != nil {
return err
}
_, err = c.Do("SET", "Release Year", 1984)
if err != nil {
return err
}
return nil
}
func get(c redis.Conn) error {
key := "Favorite Movie"
s, err := redis.String(c.Do("GET", key))
if err != nil {
return err
}
fmt.Printf("%s = %s\n", key, s)
key = "Release Year"
i, err := redis.Int(c.Do("GET", key))
if err != nil {
return err
}
fmt.Printf("%s = %d\n", key, i)
key = "Nonexistent Key"
s, err = redis.String(c.Do("GET", key))
if err == redis.ErrNil {
fmt.Printf("%s does not exist\n", key)
} else if err != nil {
return err
} else {
fmt.Printf("%s = %s\n", key, s)
}
return nil
}
func setStruct(c redis.Conn) error {
const objectPrefix string = "user:"
user := User{
Username: "coderminer.com",
MobileID: "12345678941",
Email: "kevin@163.com",
FirstName: "coderminer.com",
LastName: "coderminer.com",
}
json, err := json.Marshal(user)
if err != nil {
return err
}
_, err = c.Do("SET", objectPrefix+user.Username, json)
if err != nil {
return err
}
return nil
}
func getStruct(c redis.Conn) error {
const objectPrefix string = "user:"
username := "coderminer.com"
s, err := redis.String(c.Do("GET", objectPrefix+username))
if err == redis.ErrNil {
fmt.Println("User does not exist")
} else if err != nil {
return err
}
user := User{}
err = json.Unmarshal([]byte(s), &user)
fmt.Printf("%+v\n", user)
return nil
}
func main() {
pool := newPool()
conn := pool.Get()
defer conn.Close()
err := ping(conn)
if err != nil {
fmt.Println(err)
}
err = set(conn)
if err != nil {
fmt.Println(err)
}
err = get(conn)
if err != nil {
fmt.Println(err)
}
err = setStruct(conn)
if err != nil{
fmt.Println(err)
}
err = getStruct(conn)
if err != nil{
fmt.Println(err)
}
}
在Go语言中基础的Redis操作的更多相关文章
- C语言学习笔记:15_c语言中的进制操作.c
/* * 15_c语言中的进制操作.c * * Created on: 2015年7月5日 * Author: zhong */ #include <stdio.h> #include & ...
- C语言中常用的字符串操作函数
程序开头要声明 #include <string.h> 函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char ...
- R语言中字符串的拼接操作
在R语言中 paste 是一个很有用的字符串处理函数,可以连接不同类型的变量及常量. 函数paste的一般使用格式为: paste(..., sep = " ", collapse ...
- python语言(五)匿名函数、读写excel、操作数据库、加密、redis操作
一.匿名函数 递归:就是调用自己 def func(): num = int(input('num:')) if num % 2 ==0: print('是偶数') return else: func ...
- C语言中的基础知识变量探讨
C语言中的变量是编程的基础,主要有四个要素:存储类型.存储大小.存储名称和存储地址. 一.变量的要素: 1.存储类型:主要表明名变量存储的特征,主要有auto.extern.static和regist ...
- Go语言基础之文件操作
本文主要介绍了Go语言中文件读写的相关操作. 文件是什么? 计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件. 打开和关闭文件 os.Open()函数能够打开一个 ...
- Linux下安装redis 3.0及C语言中客户端实现demo
1.获取安装文件 wget http://download.redis.io/redis-stable.tar.gz 2.解压文件 tar xzvf redis-stable.tar.gz 3.进入目 ...
- GO学习-(16) Go语言基础之文件操作
Go语言文件操作 本文主要介绍了Go语言中文件读写的相关操作. 文件是什么? 计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件. 打开和关闭文件 os.Open( ...
- C语言中关于对目录的操作
原文地址:C语言中关于对目录的操作 目录的操作不论是在嵌入式产品还是应用软件编程都是必不可少的,不同的开发语言可能略有不同,笔者主要是讨论在Linux平台下对目录的一系列操作: 1.获取当前目录操作: ...
随机推荐
- MySQL 聚合函数 控制流程函数
常用的聚合函数 1. AVG() 求平均值 mysql> AVG([DISTINCT] expr) -- 返回 expr 的平均值 mysql> select AVG(age) from ...
- Java中的4个并发工具类 CountDownLatch CyclicBarrier Semaphore Exchanger
在 java.util.concurrent 包中提供了 4 个有用的并发工具类 CountDownLatch 允许一个或多个线程等待其他线程完成操作,课题点 Thread 类的 join() 方法 ...
- GUI学习之五——QPushbutton类学习笔记
QPushButton是QAbstractButton类下使用最多的子类,它的用法在上一章中基本讲完了,这里还总结了几个别的用法. 一.创建按钮 我们在前面所有的案例中创建按钮都是用这样的方式 win ...
- 刷机魅蓝note2
直接上了. 情况: 魅蓝note2 公共版 忘记flyme 密码,手机号也换了,,找不回了..只能刷了.网上说就算刷了也不行,还是要输入flyme 密码 1. 直接刷官方的zip 包,不行,仍然要输 ...
- #2019-2020-4 《Java 程序设计》第九周总结
2019-2020-4 <Java 程序设计>第九周知识总结 第十一章:JDBC与MySQL数据库 11.1 MySQL数据库管理系统 下载安装: 11.2 启动MySQL数据库服务器 具 ...
- Linux下mysql定时自动备份并FTP到远程脚本
1.添加backupmysqleveryday.sh(vi /data/shell/backupmysqleveryday.sh) #!/bin/sh #this shell is user for ...
- Logback简单使用
1. 添加jar包/maven配置 <dependency> <groupId>ch.qos.logback</groupId> <artifactI ...
- ffmpeg 推流相关指令
1.rtsp->rtsp(只解封装,不解码) ffmpeg -re -rtsp_transport tcp -i rtsp://usr:passwd@ip:port/h264/ch1/sub/a ...
- centos6安装oracle11g过程中报错Error in invoking target “install” of makefile ‘/home/oracle/app/oracle/product/11.2.0/dbhome_1/ctx/lib/ins_ctx.mk’
报这个错误的原因是由于缺少compat_libstdc包所导致.安装即可 1.在http://www.rpm-find.net/linux/rpm2html/search.php?query=comp ...
- javascript_01