在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.获取当前目录操作: ...
随机推荐
- Vmware 无法启动虚拟机 -VMware Workstation and Device/Credential Guard are not compatible.
因为在学习Linux,起初尝试用Hyper-V安装Linux进行学习,之后为了方便和老师的设置一样,所以改装了VMware,所有初始设置先好后发现,虚机机无法启用. VMware也提示不支持CPU虚拟 ...
- Android接口Parcelable的使用
注明:非原创,转载,原链接地址为:http://www.2cto.com/kf/201205/132814.html 和 http://www.blogjava.net/lincode/archive ...
- css摘要
由于需要,今天花三个小时了解一下css,在此记录一些摘要: 参考w3school 1. 当同一个 HTML 元素被不止一个样式定义时,会使用哪个样式呢? 一般而言,所有的样式会根据下面的规则层叠于一个 ...
- js 控制光标到指定位置
js控制光标到指定节点位置(适用于富文本编辑器中) function placeCaretAtEnd(el) { //传入光标要去的jq节点对象 el.focus(); if (typeof wind ...
- s3-1 数据链路层概述
数据链路层功能 为网络层提供服务,良好的服务接口 保证数据传输的有效.可靠: - 处理传输错误:差错检测和控制 流量控制 • 基于速率 • 基于反馈 数据链路层的位置 位于网络层之 ...
- deepCopy深拷贝
function deepCopy(p,c){ var c = c || {}; for ( var i in p ){ //确保属于自己的属性 if ( p.hasOwnProperty( i ) ...
- Cbv源码简单分析图
重点:cbv源码的简单分析(有后续)
- BP神经网络 详解模板
%原始数据输入 P=[ - 6.142 - 27.5 5.068 - 31.7 5.196 - 34.1 6.362 - 31.54 6.472 - 30.17 6.578 - 29.53 6.351 ...
- Exp3 免杀原理与实践 ——20164325王晓蕊
一.实践基本内容 1.实践目标 (1) 正确使用msf编码器(√),msfvenom生成如jar之类的其他文件(√),veil-evasion(√),加壳工具(√),使用shellcode编程(√) ...
- wxPython 的简单框架实例
#coding:utf-8 import wx def load(event): file = open(filename.GetValue(),'r') contents.SetValue(file ...