从今天开始准备写一个redis章节的学习文章,主要是为了帮助自己巩固redis相关知识,然后就是做一个学习记录,我将从以下几个方面来总结。
reids的安装以及redis的几种数据结构说明。
redis的一条指令是如何被发送执行的。
redis的持久化方案。
字符串的内部实现原理。
redis哨兵模式以及集群模式(时间充裕可能会尝试搭建一套出来)。
Java代码中如何使用。
话不多说,直接开干。
redis简介
我们在学习一门技术的时候,首先应该清楚的认识到这门技术是干什么的,能为我们解决什么样的问题。官网是这样介绍的:数百万开发人员用作数据库、缓存、流引擎和消息代理的开源内存数据存储。没错它就是一个开源的、非关系型的数据库,它是基于内存的一种数据库,我们知道内存的一个特点就是快,所以它广泛的使用在项目中,业务中的热点数据都会优先被保存在reids中方便快速读取。
redis安装
由于redis是用c语言开发的,需要先安装gcc环境,如果没有安装可以先安装:
yum install -y gcc
下载:
wget http://download.redis.io/releases/redis-6.2.5.tar.gz
解压:
tar -zxvf redis-6.2.5.tar.gz
安装:
进入到解压目录执行 make
安装完成之后进入安装目录的src下,执行 ./redis-server 即可启动redis,然后执行src目录下的 ./redis-cli即可进入客户端使用。
常见数据结构以及基本使用方式
redis现在已经发展到有9种数据类型了,不过最基础常见的数据类型有5种:字符串、列表、哈希表、集合以及有序集合。
字符串类型(string)
它的基本使用方式:
127.0.0.1:6379> set key value
OK
127.0.0.1:6379> get key
"value"
可以看到我们要在reidis存储一个字符串,直接set就可以了,如果要获取直接get就可以了,这只是基本的存值取值,还有很多其它用法,比如设置存活时间,给字符串追加,获取字符串长度等等,我这里就不一一列出来了,以后在需要使用的时候自己会查就可以了,字符串的底层实现还是比较有意思的 ,我会在后面拿出来专门介绍。
列表(list)
列表类型是一个使用链表结构的有序存储结构,它的元素插入会按照先后顺序存储到链表结构中,因此它的元素操作时间复杂度为O(1)的,但是查询速度为O(n)的,查询比较相对比较慢。
![](https://img-blog.csdnimg.cn/img_convert/3e7d28aa396ae8de7a73c5a40a75389a.png)
![](https://img-blog.csdnimg.cn/img_convert/1414f038826cd0fa328a47afb8384a51.png)
为了直观的观察,我直接采用截图的方式演示效果。可以看到,插入元素可以从左边push也可以从右边push,查询直接采用lrange输入元素的起始位置跟结束位置(-1)表示查所有。
哈希表(hash)
这种数据结构是一个键值对集合,如右图所示,它是一个key对应了,一系列键值对。
![](https://img-blog.csdnimg.cn/img_convert/07a06089c33b78a8a6f1ec06b21bdf1d.png)
![](https://img-blog.csdnimg.cn/img_convert/d762f04a2cf7402ea28d3c0730a89232.png)
集合(Set)
集合是一个无序的集合,并且元素唯一,所以它的存储顺序不会按照插入的先后顺序进行存储。sadd 表示表示添加元素,smembers 表示查询集合的所有元素,可以看到于插入元素顺序不一致,scard表示查看集合有多少个元素。
![](https://img-blog.csdnimg.cn/img_convert/aecac9926989313dc6f91002e81616ce.png)
有序集合(zset)
有序集合相比集合类型多了一个排序属性,有序集合中的每个值都有一个排序属性(score),有序集合中的元素也是不能重复的。从下图可以看到在为有序集合添加元素的时候,会为元素添加一个分值,而这个分值就决定了这个元素在集合中的位置,分值越小越靠前。
![](https://img-blog.csdnimg.cn/img_convert/67e6f1642eb1489983507170adfcd525.png)
以上就是简单说明redis几种基本数据结构,其实redis已经有很多种数据结构了,如果感兴趣或者实际使用到可以详细去了解。
![](https://img-blog.csdnimg.cn/img_convert/d4d2d08a9f898e47fd1cf993444d0b87.png)
总结
本年文章主要简单介绍了Redis是什么,它是一个非关系型的数据库,它的数据都是以Key-Vlaue形式存储在数据库中的,业务中常常会把热点数据存储在redis中,可以提升查询效率,当然redis还可以实现其它许多功能,比如实现消息队列、session共享等功能;然后还简单说明了redis安装过程,还简单介绍了几种基本数据类型的使用,其实它们的底层实现使用了很多种数据结构,比如SDS、链表、跳跃表、压缩列表等等,如果感兴趣后面会介绍。
下一篇文章我会介绍一条redis指令是如何被发送到服务器解析被执行的。