Go语言开发中redis的使用详解
作者:小歪子go 发布时间:2024-02-14 12:58:27
前段时间因为忙一些其它的事情,分享的有些少,最近学习一下redis在Go语言开发中的应用。
一、理论知识
Redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。
Redis 优势
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis与其他key-value存储有什么不同?
Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
二、使用:
在开发过程中我们使用到了开源库redis如下
github地址
https://github.com/garyburd/redigo
文档地址:
http://godoc.org/github.com/garyburd/redigo/redis
1、数据库的连接
func connDB() (c redis.Conn, err error) {
db, err := redis.Dial("tcp", "127.0.0.1:6379")
if err != nil {
fmt.Println("Connect to redis error", err)
return
}
return db, err
}
2、写入
func saveToDB(c redis.Conn) {
_, err := c.Do("SET", "name", "qiuqiu", "EX", "50")
if err != nil {
fmt.Println("redis set failed:", err)
} else {
fmt.Println("save success")
}
}
//批量写入
_, err := c.Do("MSET", "name", "superWang", "SEX", "F", "EX", "50")
if err != nil {
fmt.Println("redis set failed:", err)
} else {
fmt.Println("save success")
}
//tips:EX是这个值的过期时间
3、读取
func readFromDB(c redis.Conn) {
username, err := redis.String(c.Do("GET", "name"))
if err != nil {
fmt.Println("redis get failed:", err)
} else {
fmt.Printf("Get mykey: %v \n", username)
}
}
//批量读取
func readFromDB(c redis.Conn) {
username, err := redis.Strings(c.Do("MGET", "SEX", "name"))
if err != nil {
fmt.Println("redis get failed:", err)
} else {
fmt.Printf("Get mykey: %v \n", username)
}
}
4、删除
func delFromDB(c redis.Conn) {
_, err := c.Do("DEL", "name", "SEX")
if err != nil {
fmt.Println("redis delete failed:", err)
} else {
fmt.Println("delete success")
}
}
5、设置keys 过期时间
在写入的时候如果设置了EX的时间,则当前的key过期时间为设置时间,不设置则当前的key永久有效
6、读写json到redis
//写json
func saveJsonDataToDB(c redis.Conn) {
imap := map[string]string{"name": "waiwaigo", "phone": "13498739038"}
value, _ := json.Marshal(imap)
n, err := c.Do("SETNX", "jsonkey", value)
if err != nil {
fmt.Println(err)
}
if n == int64(1) {
fmt.Println("success")
}
}
//读json
func readJsonFromDB(c redis.Conn) {
var imapGet map[string]string
valueGet, err := redis.Bytes(c.Do("GET", "jsonkey"))
if err != nil {
fmt.Println(err)
}
errShal := json.Unmarshal(valueGet, &imapGet)
if errShal != nil {
fmt.Println(err)
}
fmt.Println(imapGet["name"])
fmt.Println(imapGet["phone"])
}
7、列表操作,存入一组数据
//存列表
func saveListToDB(c redis.Conn) {
_, err := c.Do("lpush", "username", "zhangsan")
if err != nil {
fmt.Println("redis set failed:", err)
}
_, err = c.Do("lpush", "username", "lisi")
if err != nil {
fmt.Println("redis set failed:", err)
}
_, err = c.Do("lpush", "username", "wangwu")
if err != nil {
fmt.Println("redis set failed:", err)
}
}
//读列表
func readListFromDB(c redis.Conn) {
values, _ := redis.Values(c.Do("lrange", "username", "0", "2"))
fmt.Printf("count%d", len(values))
for _, v := range values {
fmt.Println(string(v.([]byte)))
}
}
来源:https://www.jianshu.com/p/1646ff9c9bed
猜你喜欢
- JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它采用完全独立于语言的文本格式,可替换XML成
- 1、读取数据文件回归分析问题所用的数据都是保存在数据文件中的,首先就要从数据文件读取数据。数据文件的格式很多,最常用的是 .csv,.xls
- 今天介绍一种基于高斯滤波和邻域随机采样,生成一种毛玻璃的图像特效,简单来说,就是先对图像做高斯滤波模糊,然后对模糊后的图像,通过对邻域的随机
- CONVERT的使用方法: 格式: CONVERT(data_type,expression[,style]) 说明: 此样式一般在时间类型
- 打包成exe文件可以让python代码在没有python环境的条件下,依然能够运行,实在是码农们写追女朋友表白、情人节浪漫的必需品!1、使用
- 依托于互联网的发达,我们可以随时随地利用一些等车或坐地铁的碎片时间学习以及了解资讯。同时发达的互联网也方便人们能够快速分享自己的知识,与相同
- 在windows+iis服务器上运行asp程序可能会出现数据库无法更新的情况,具体错误信息可能为: 1、Microsoft JET Data
- 本教程为大家分享了win10下Python环境安装配置教程,供大家参考,具体内容如下1.在https://www.python.org/do
- 为了处理根据Web标准创作的网页和根据盛行于20世纪90年代末的旧时实践创作的网页,当代的Web浏览器实现了各种不同的引擎模式。本文说明了那
- 杨辉三角,是二项式系数在三角形中的一种几何排列每个数等于它上方两数之和。每行数字左右对称,由1开始逐渐变大。第n行的数字有n项。第n行数字和
- 1、说明创建堆有两种基本方法:heappush() 和 heapify()。当使用heappush()时,当新元素添加时,堆得顺序被保持了。
- .csv数据格式 10*3,dataSet 1.1,1.5,2.5 1.3,1.9,3.2 1.5,2.3,3.9 1.7,2.7,4.6
- pycharm全局修改pycharm 全局改函数方法1ctrl shift r全局替换方法2点击函数,右键 Refactor Ch
- 本文实例分析了LINUX下Oracle数据库用户创建方法。分享给大家供大家参考,具体如下:1)登录linux,以oracle用户登录(如果是
- 因为自己在设计的时候就对这些东西经常不是很在意,以为是很小的事情,结果往往给自己搞出不少的麻烦。可能大家没有我这么粗心,不过还是想提醒一下跟
- 当需要存储很多同类型的不通过数据时可能需要使用到嵌套,先用一个例子说明嵌套的使用1、在列表中存储字典#假设年级里有一群国际化的学生,有黄皮肤
- 安装SQL Server 遇到错误提示:以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机!。找了半天
- 正在看的ORACLE教程是:ORACLE常见错误代码的分析与解决三。 -----------------------------
- 前言 本篇章主要介绍二叉树的应用之一------二叉排序树,包括二叉排序树的定义、查找、插入、构造、删除及查找效率分析。1. 二叉排序树的
- 如下所示:import pandas as pdfrom pandas import DataFrameseries = pd.read_c