【Redis】简单使用

冉小妹Ran · · 1230 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

一个练手的小项目用到了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))
    }
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:冉小妹Ran

查看原文:【Redis】简单使用

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1230 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传