一个练手的小项目用到了redis数据库,以前没有接触过,大概看了一下教程,在这里做个简单的使用笔记。
文章目录
- Redis相关简介
1.Redis是什么
2.安装Redis
3.启动Redis
4.Redis数据类型- Go操作redis
Redis相关简介
Redis是什么
一个高性能的key-value数据库。
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
安装Redis
官网下载msi文件安装,一直下一步直至安装成功。
启动Redis
Redis安装路径下,redis-server.exe是Redis的服务端,redis-cli.exe是Redis的客户端,双击启动即可。
服务端启动
Redis数据类型
5种:string(字符串), hash(哈希), list(列表), set(集合), zset(sorted set,有序集合)
String
SET key value //设置指定 key 的值
GET key //获取指定 key 的值。
image.png
Hash
HGET key field //获取存储在哈希表中指定字段的值。
HGETALL key //获取在哈希表中指定 key 的所有字段和值
HMSET key field1 value1 [field2 value2 ] //同时将多个 field-value (域-值)对设置到哈希表 key 中。
image.png
List
一个简单列表,按照插入顺序排序。
LPUSH key value1 [value2] //将一个或多个值插入到列表头部
LRANGE key start stop //获取列表指定范围内的元素
image.png
Set
set和list的区别,list有序,set无序。
即Set是个无序集合,且成员唯一。
SADD key member1 [member2] //向集合添加一个或多个成员
SMEMBERS key //返回集合中的所有成员
image.png
Zset
Zset和Set类似,只是比set多了一个score字段,score字段可以重复,member不可以重复。
ZADD key score1 member1 [score2 member2] //向有序集合添加一个或多个成员,或者更新已存在成员的分数
ZRANGE key start stop [WITHSCORES] //通过索引区间返回有序集合指定区间内的成员
image.png
Go操作Redis
Golang操作Redis有两种方式。
- 方式一:使用conn.Do(commandName string, args ...interface{})方法,执行相应的操作。
代码如下:
package main
import (
"fmt"
"log"
"github.com/gomodule/redigo/redis"
)
func GetConn() redis.Conn {
conn, err := redis.Dial("tcp", fmt.Sprintf("%s:%d", "127.0.0.1", 6379))
if err != nil {
log.Println("connect redis error", err)
return nil
}
return conn
}
func main() {
conn := GetConn()
if conn == nil {
log.Println("conn is nil")
}
defer conn.Close()
_, err := conn.Do("SET", "a", "b")
if err != nil {
log.Println("set error")
}
result, err := redis.String(conn.Do("GET", "a"))
if err != nil {
log.Println("get error")
}
fmt.Println(result)
}
- 方式二:使用pipeline。pipeline可以一次性发送多条执行命令,并批量返回结果。pipeline底层实现方式是队列,FIFO(First in first out,先进先出)可以保证执行的顺序。
// 往队列中添加指令
Send(commandName string, args ...interface{}) error
// 一次性发送指令到服务端
Flush() error
// 接收服务端返回的数据
Receive() (reply interface{}, err error)
代码如下:
package main
import (
"fmt"
"log"
"github.com/gomodule/redigo/redis"
)
func GetConn() redis.Conn {
conn, err := redis.Dial("tcp", fmt.Sprintf("%s:%d", "127.0.0.1", 6379))
if err != nil {
log.Println("connect redis error", err)
return nil
}
return conn
}
func main() {
conn := GetConn()
if conn == nil {
log.Println("conn is nil")
}
defer conn.Close()
conn.Send("SET", "fruit", "apple")
conn.Send("SET", "animal", "dog")
conn.Send("GET", "fruit")
conn.Flush()
for i := 0; i < 3; i++ {
result, err := conn.Receive()
if err != nil {
log.Println("pipeline error")
}
fmt.Println(redis.String(result, err))
}
}
网友评论