Redis使用笔记 | 青训营

102 阅读6分钟

Redis使用笔记 | 青训营

一、Redis介绍

Redis诞生于2009年全称是Remote Dictionary Server 远程词典服务器,是一个基于内存的键值型NoSQL数据库。

特征

  • 键值(key-value)型,value支持多种不同数据结构,功能丰富
  • 单线程,每个命令具备原子性
  • 低延迟,速度快(基于内存、IO多路复用、良好的编码)。
  • 支持数据持久化
  • 支持主从集群、分片集群
  • 支持多语言客户端

Redis是一种键值型的NoSql数据库,这里有两个关键字:

  • 键值型

  • NoSql

其中键值型,是指Redis中存储的数据都是以key、value对的形式存储,而value的形式多种多样,可以是字符串、数值、甚至json:

image-20220502190959608转存失败,建议直接上传图片文件

二、Redis五大数据类型

1、String类型

String类型,也就是字符串类型,是Redis中最简单的存储类型。

其value是字符串,不过根据字符串的格式不同,又可以分为3类:

  • string:普通字符串
  • int:整数类型,可以做自增、自减操作
  • float:浮点类型,可以做自增、自减操作

不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。字符串类型的最大空间不能超过512m.

2、键值对

Redis没有类似MySQL中的Table的概念,我们该如何区分不同类型的key呢?

例如,需要存储用户、商品信息到redis,有一个用户id是1,有一个商品id恰好也是1,此时如果使用id作为key,那就会冲突了,该怎么办?

我们可以通过给key添加前缀加以区分,不过这个前缀不是随便加的,有一定的规范:

Redis的key允许有多个单词形成层级结构,多个单词之间用':'隔开,格式如下:

	项目名:业务名:类型:id

这个格式并非固定,也可以根据自己的需求来删除或添加词条。这样以来,我们就可以把不同类型的数据区分开了。从而避免了key的冲突问题。

3、Hash类型

Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。

String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便,Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD。

4、List类型

Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。

特征也与LinkedList类似:

  • 有序
  • 元素可以重复
  • 插入和删除快
  • 查询速度一般

常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表等。

5、Set类型

Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特征:

  • 无序

  • 元素不可重复

  • 查找快

  • 支持交集、并集、差集等功能

三、Linux下安装Redis

1、依赖库

Redis是基于C语言编写的,因此首先需要安装Redis所需要的gcc依赖:

yum install -y gcc tcl

2、下载Redis安装解压包并解压

解压缩:

tar -xzf redis-6.2.6.tar.gz

3、执行安装命令

进入redis目录:

cd redis-6.2.6

运行编译命令:

make && make install

如果没有出错,应该就安装成功了。

4、启动

安装完成后,在任意目录输入redis-server命令即可启动Redis:

redis-server

5、配置开机自启

首先,新建一个系统服务文件:

vi /etc/systemd/system/redis.service

内容如下:

[Unit]
Description=redis-server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /usr/local/src/redis-6.2.6/redis.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target

然后重载系统服务:

systemctl daemon-reload

现在,我们可以用下面这组命令来操作redis了:

# 启动
systemctl start redis
# 停止
systemctl stop redis
# 重启
systemctl restart redis
# 查看状态
systemctl status redis

执行下面的命令,可以让redis开机自启:

systemctl enable redis

四、Go语言如何访问Redis

1、连接

Conn 接口是与 Redis 协作的主要接口,可以使用 Dial, DialWithTimeout 或者 NewConn 函数来创建连接,当任务完成时,应用程序必须调用 Close 函数来完成操作。

c, err := redis.Dial("tcp", "localhost:6379")
if err != nil {
	fmt.Println("Connect to redis error", err)
	return
}else {
	fmt.Println("连接成功")
}
defer c.Close()

2、常用命令操作

可以通过使用 Conn 接口中的 do 方法执行 redis 命令

get、set 操作:

// 写入数据,永不过期
_, err = c.Do("SET", "username", "nick")
if err != nil {
	fmt.Println("redis set failed:", err)
}
// 写入数据,10s后过期
_, err = c.Do("SET", "password", "123456", "EX", "10")
if err != nil {
	fmt.Println("redis set failed:", err)
}
// 读取数据
username, err := redis.String(c.Do("GET", "username"))
if err != nil {
	fmt.Println("redis get failed:", err)
} else {
	fmt.Printf("Got username %v \n", username)
}
// 读取数据
passwd, err := redis.String(c.Do("GET", "password"))
if err != nil {
	fmt.Println("redis get failed:", err)
} else {
	fmt.Printf("Got password %v \n", passwd)
}

列表操作:

// 列表操作
c.Do("lpush", "redlist", "qqq")
c.Do("lpush", "redlist", "www")
c.Do("lpush", "redlist", "eee")
values, _ := redis.Values(c.Do("lrange", "redlist", "0", "2"))
for _, v := range values {
	fmt.Println(string(v.([]byte)))
}

hash操作:

// hash 操作
_, err = c.Do("HSET", "student","name", "nill","passwd","123456")
if err != nil {
	fmt.Println("redis mset error:", err)
}
resi, err := redis.Int64(c.Do("HGET", "student","passwd"))
if err != nil {
	fmt.Println("redis HGET error:", err)
} else {
	res_type := reflect.TypeOf(resi)
	fmt.Printf("res type : %s \n", res_type)
	fmt.Printf("res  : %d \n", resi)
}

五、笔记总结

​ 今天主要了解了Redis是什么以及基本数据类型,通过Go语言进行了简单的操作。后续还需要学习Redis的底层数据结构,IO多路复用模型,以及分布式锁和分布式事务等。期待能够在未来的项目中充分运用这些知识,构建出更加高效和可靠的应用。

六、附录

  1. Redis官方网站:redis.io/ 这是Redis的官方网站,上面提供了丰富的文档、教程、示例代码和最新版本的下载等资源。
  2. Redis官方文档:redis.io/documentati… 官方文档是学习Redis最权威的参考资料,其中包括Redis的各种指令、配置项、数据类型和特性等详细说明。
  3. Go语言Redis客户端库:pkg.go.dev/github.com/… 这是Go语言Redis客户端库的官方文档,你可以在这里了解如何使用Go与Redis服务器进行交互。
  4. Redis入门教程 - 菜鸟教程:www.runoob.com/redis/redis… 菜鸟教程提供了简单易懂的Redis入门教程,适合初学者快速上手