本文介绍: 1.Redis是NoSQL数据库,不是传统关系数据库官网http://redis.io/和http://redis.cn/2.Redis:REmote Dlctionary Server (远程字典服务器),Redis性能非常高,当即能够达到15w qps,通常适合做换成,也可以持久化3.是完全开源免费的,高性能的(key/value)分布式内存数据库基于内存运行支持持久化的NoSQL数据区,是最热门的NoSql数据库之一,也称为数据结构服务器。

基本介绍

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.添加keyval[set]

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

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

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

5.如何查看当前数据库keyval数量[dbsize]

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

在这里插入图片描述

Redis数据类型和CRUD

Redis五大数据类型

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

string使用细节注意事项

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

hash使用细节注意事项

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

Redis hash一个string类型fieldvalue映射表,hash特别适合用于存储对象
在这里插入图片描述

list使用细节注意事项

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

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

lpush表示左边插入

rpush表示右边插入

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

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

在这里插入图片描述

set使用细节注意事项

Redis的setstring类型无序集合

底层是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)
}

原文地址:https://blog.csdn.net/weixin_49750432/article/details/129549025

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_36270.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注