go Redis | 青训营

65 阅读2分钟

1.什么是Redis

Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

与MySQL数据库不同的是,Redis的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过10万次读写操作。因此redis被广泛应用于缓存,另外,Redis也经常用来做分布式锁。除此之外,Redis支持事务、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。

2.Redis的基本数据结构类型

Redis有以下五种基本类型:

  • String(字符串)

  • Hash(哈希)

  • List(列表)

  • Set(集合)

  • zset(有序集合) 以及三种特殊的数据结构类型

  • Geospatial

  • Hyperloglog

  • Bitmap

(1)String(字符串)

String是Redis最基础的数据结构类型,它是二进制安全的,可以存储图片或者序列化的对象,值最大存储为512M。

简单使用举例: set key value、get key等

应用场景:共享session、分布式锁,计数器、限流。

  • 内部编码有3种,int(8字节长整型)/embstr(小于等于39字节字符串)/raw(大于39个字节字符串)

(2)Hash(哈希)

在Redis中,哈希类型是指v(值)本身又是一个键值对(k-v)结构

简单使用举例:hset key field value 、hget key field

内部编码:ziplist(压缩列表) 、hashtable(哈希表)

应用场景:缓存用户信息等。

(3)List(列表)

简介:列表(list)类型是用来存储多个有序的字符串,一个列表最多可以存储2^32-1个元素。

简单实用举例:lpush key value [value ...] 、lrange key start end

内部编码:ziplist(压缩列表)、linkedlist(链表)

应用场景:消息队列,文章列表,

(4)Set(集合)

简介:集合(set)类型也是用来保存多个的字符串元素,但是不允许重复元素

简单使用举例:sadd key element [element ...]、smembers key

内部编码:intset(整数集合)、hashtable(哈希表)

注意点:smembers和lrange、hgetall都属于比较重的命令,如果元素过多存在阻塞Redis的可能性,可以使用sscan来完成。

应用场景:用户标签,生成随机数抽奖、社交需求。

(5)有序集合(zset)

简介:已排序的字符串集合,同时元素不能重复

简单格式举例:zadd key score member [score member ...],zrank key member

底层内部编码:ziplist(压缩列表)、skiplist(跳跃表)

应用场景:排行榜,社交需求(如用户点赞)。

3.go连接Redis

使用go-redis连接redis服务器

  • 安装依赖包go get -u github.com/go-redis/redis
  • go连接Redis
 
import (
	"fmt"
	"github.com/go-redis/redis"
)
 
var rdb *redis.Client
 
func initRedisClient() (err error) {
	rdb = redis.NewClient(&redis.Options{
		Addr:     "localhost:6379",
		Password: "",
		DB:       0,
	})
	_, err = rdb.Ping().Result()
 
	if err != nil {
		return err
	}
	return nil
}