IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Golang中Redis的使用 -> 正文阅读

[大数据]Golang中Redis的使用

Golang中Redis的使用

image-20220208152523316

Redis的基本操作

1.添加key-val

image-20220208160754582

2.切换数据库

image-20220208160840282

3.查看数据库当前的数据库key-val 数量 dbsize

image-20220208160952132

4.清空数据库 flushdb flushall

image-20220208161144313

Redis的五大数据类型

Redis的五大数据类型是: String(字符串)、Hash (哈希)、List(列表)、Set(集合)和zset(sorted set:有序集合)

String(字符串)

string是redis最基本的类型,一个key对应一个value.

string类型是二进制安全的。除普通的字符串外,也可以存放图片等数据。

redis中字符串value最大是512M

set
image-20220208161859827
del
image-20220208162036962
setex
image-20220208162443117
mset
image-20220208162825498
mget
image-20220208163002666

Hash(哈希)

Redis hash是一个键值对集合。var user1 map[string]string

Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

Hash 的key 不能重复

hset/hget
image-20220208163520788
hgetall
image-20220208163754954
hdel
image-20220208163921312
hmset/hmget
image-20220208164100783
hlen
image-20220208164155333
hexists
image-20220208164250539

List(列表)

列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

image-20220208165511746

List本质是个链表, List的元素是有序的,元素的值可以重复.

lpush/lrange

lpush往左边加入数据

image-20220208164922975

0 表示第一个,-1 表示倒数第一个。

rpush

rpush往右边加入数据

image-20220208165721004
lpop/rpop
image-20220208165912159
del
image-20220208170024513
llen
image-20220208170321264
lindex

按照索引下标获得元素(从左到右,编号从0开始.

Set(集合)

Redis的Set是string类型的无序集合。

底层是HashTable数据结构,Set也是存放很多字符串元素

字符串元素是无序的,而且元素的值不能重复

sadd/smembers
image-20220208170824245
sismember

判断是否存在

image-20220208171108570
srem

删除

image-20220208171236390

Golang操作Redis

将https://github.com/gomodule/redigo.git 克隆到 GOPATH的src路径下

操作string

通过go 向 redis 写入数据 和 读取数据 key -value

package main

import (
   "fmt"
   "redigo/redis"
)

func main() {
   //通过go 向 redis 写入数据 和 读取数据
   //1. 连接到 redis
   conn, err := redis.Dial("tcp", "127.0.0.1:6379")
   if err != nil {
      fmt.Println("redis Dial err = ", err)
      return
   }
   defer conn.Close() //关闭连接
   //fmt.Println("conn success ...", conn)

   //2.通过go向redis写入数据string [key-val]
   _, err = conn.Do("Set", "name", "tom")
   if err != nil {
      fmt.Println("redis set err = ", err)
      return
   }
   fmt.Println("操作成功")

   //3.通过go向redis读取数据string [key-val]
   r, err := redis.String(conn.Do("Get", "name"))
   if err != nil {
      fmt.Println("redis set err = ", err)
      return
   }

   //因为返回的r 是 interface{}
   //我们需要转成 string

   fmt.Println("操作成功", r)
}

操作Hash

//单个放入和读取
package main

import (
   "fmt"
   "redigo/redis"
)

func main() {

   //1. 连接到 redis
   conn, err := redis.Dial("tcp", "127.0.0.1:6379")
   if err != nil {
      fmt.Println("redis Dial err = ", err)
      return
   }
   defer conn.Close() //关闭连接
   //fmt.Println("conn success ...", conn)

   //2.通过go向redis写入数据string [key-val]
   _, err = conn.Do("HSet", "user01", "name", "john")
   if err != nil {
      fmt.Println("redis hset err = ", err)
      return
   }
   _, err = conn.Do("HSet", "user01", "age", 10)
   if err != nil {
      fmt.Println("redis hset err = ", err)
      return
   }
   fmt.Println("操作成功")

   //3.通过go向redis读取数据string [key-val]
   r1, err := redis.String(conn.Do("HGet", "user01", "name"))
   if err != nil {
      fmt.Println("redis hget err = ", err)
      return
   }

   r2, err := redis.String(conn.Do("HGet", "user01", "age"))
   if err != nil {
      fmt.Println("redis hget err = ", err)
      return
   }
   //因为返回的r 是 interface{}
   //我们需要转成 string

   fmt.Printf("操作成功,r1 =  %v r2 = %v \n", r1, r2)
}
//批量的放入和读取
package main

import (
   "fmt"
   "redigo/redis"
)

func main() {

   //1. 连接到 redis
   conn, err := redis.Dial("tcp", "127.0.0.1:6379")
   if err != nil {
      fmt.Println("redis Dial err = ", err)
      return
   }
   defer conn.Close() //关闭连接
   //fmt.Println("conn success ...", conn)

   //2.通过go向redis写入数据string [key-val]
   _, err = conn.Do("HMSet", "user04", "name", "john", "age", 100)
   if err != nil {
      fmt.Println("redis hmset err = ", err)
      return

   }
   fmt.Println("操作成功")

   //3.通过go向redis读取数据string [key-val]
   r1, err := redis.Strings(conn.Do("HMGet", "user04", "name", "age"))
   if err != nil {
      fmt.Println("redis hmget err = ", err)
      return
   }

   for i, v := range r1 {
      fmt.Printf("r[%d] = %v \n", i, v)
   }

}

Redis连接池

  1. 事先初始化一定数量的链接,放入到链接池
  2. 当Go需要操作Redis时,直接从Redis链接池取出链接即可。
  3. 这样可以节省临时获取Redis链接的时间,从而提高效率.
image-20220208202026302 image-20220208202450467
package main

import (
   "fmt"
   "redigo/redis"
)

func main() {
   //先从pool 取出 一个连接
   conn := pool.Get()
   defer conn.Close()

   _, err := conn.Do("set", "name", "tom")
   if err != nil {
      fmt.Println("conn.do err = ", err)
      return
   }

   //取出
   r, err := redis.String(conn.Do("get", "name"))
   if err != nil {
      fmt.Println("err = ", err)
      return
   }
   fmt.Println(r)
}

//定义一个全局的pool
var pool *redis.Pool

//当启动程序时,就初始化连接池
func init() {
   pool = &redis.Pool{
      MaxIdle:     8,
      MaxActive:   0,
      IdleTimeout: 100,
      Dial: func() (redis.Conn, error) {
         return redis.Dial("tcp", "localhost:6379")
      },
   }
}
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-02-09 20:46:17  更:2022-02-09 20:47:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 14:03:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码