46-Golang中的Redis

  • Post author:
  • Post category:golang




基本介绍

1.Redis是NoSQL数据库,不是传统的关系型数据库,官网:http://redis.io/和http://redis.cn/

2.Redis:REmote Dlctionary Server (远程字典服务器),Redis性能非常高,当即能够达到15w qps,通常适合做换成,也可以持久化

3.是完全开源免费的,高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据区,是最热门的NoSql数据库之一,也称为数据结构服务器

在这里插入图片描述

在这里插入图片描述



Redis的基本使用

说明:Redis安装好后,默认有16个数据库,初始默认使用0号库,标号是0…15

1.添加key-val[set]

2.查看当前redis的所有key [keys*]

3.获取key对应的值.[get key]

4.切换redis数据库[select index]

5.如何查看当前数据库的key-val数量[dbsize]

6.清空当前数据库的key-val和清空所有数据库的key-val[flushdb flushall]

在这里插入图片描述



Redis数据类型和CRUD



Redis五大数据类型

Redis的五大数据类型是:string,Hash,List,Set和zset(Sorted set:有序集合)



string使用细节和注意事项

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述



hash使用细节和注意事项

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

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

在这里插入图片描述



list使用细节和注意事项

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

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

lpush表示从左边插入

rpush表示从右边插入

lpop/rpop表示从左边/右边弹出一个数据

LLEN key表示返回列表key的长度,如果可以不存在,则可以被解释为一个空列表,返回0

在这里插入图片描述



set使用细节和注意事项

Redis的set是string类型的无序集合

底层是Hash Table数据结构,set也是存放很多字符串元素,字符串元素是无序的,而且元素的值不能重复

sadd[添加]

smembers[取出所有的值]

sismenber[判断值是否是成员]

srem[删除指定值]

在这里插入图片描述



Go链接到Redis

可以多找找其他帖子(手动狗头)

在这里插入图片描述



Go操作Redis(string类型)
package main

import (
	"fmt"
	"github.com/garyburd/redigo/redis" //引入Redis包
)

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

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

	//通过go向Redis读取数据 string[key-val]
	r, err := redis.String(conn.Do("Get", "name"))
	if err != nil {
		fmt.Println("set err=", err)
		return
	}
	//因为返回的r是interface{}
	//因为name对应的值时string,因此我们需要转换

	fmt.Println("操作OK", r)
}
//操作OK tom



Go操作Redis(hash类型)
package main

import (
	"fmt"
	"github.com/garyburd/redigo/redis" //引入Redis包
)

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

	//通过go向Redis写入数据string[key-val]
	_, err = conn.Do("Hset", "user01", "name", "jhon")
	if err != nil {
		fmt.Println("set err=", err)
		return
	}
	_, err = conn.Do("Hset", "user01", "age", "18")
	if err != nil {
		fmt.Println("set err=", err)
		return
	}

	//通过go向Redis读取数据 string[key-val]
	r1, err := redis.String(conn.Do("HGet", "user01", "name"))
	if err != nil {
		fmt.Println("HGet err=", err)
		return
	}
	r2, err := redis.Int(conn.Do("HGet", "user01", "age"))
	if err != nil {
		fmt.Println("HGet err=", err)
		return
	}
	//因为返回的r是interface{}
	//因为name对应的值时string,因此我们需要转换

	fmt.Println("操作OK", r1, r2)
}
//操作OK jhon 18



Redis连接池

说明:Golang对Redis操作,还可以通过Redis链接池,

1.事先初始化一定数量的链接,放入到连接池

2.当GO需要操作Redis时,直接从Redis连接池取出链接即可

3.这样可以节省临时获取Redis链接的时间,从而提高效率

package main

import (
	"fmt"
	"github.com/garyburd/redigo/redis"
)

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

//当启动程序时,就初始化链接池
func init() {
	pool = &redis.Pool{
		MaxIdle:     8,   //最大空闲链接数
		MaxActive:   0,   //表示和数据库的最大链接数,0表示没有限制
		IdleTimeout: 100, //最大空闲空间
		Dial: func() (redis.Conn, error) { //初始化链接代码,链接哪个ip
			return redis.Dial("tcp", "localhost:6379")
		},
	}
}

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

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



版权声明:本文为weixin_49750432原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。