[Redis源码系列]在Liunx安装和常见API

前言

hello,很久不见,又断更了一段时间。同事大部分离职了,可是活仍是同样,因此只能硬着头皮顶上。如今总算歇会了,决定开启Redis源码系列,但愿不要啪啪啪打脸。html


什么是redis?

Redis是一种基于键值对(key-value)的NoSQL数据库,主要的数据类型包括String(字符串),hash(哈希),list(列表),set(集合),zset(有序集合),bitmaps(位图),GEO(地理信息定位)等。java

注意:若是面试问Redis数据类型,前五个是基础,必须答对,后面两个是亮点。linux

redis的优点

1.数据存储在内存中,读取和写入速度快。若是须要持久化,能够开启相关配置,数据按期保存在硬盘上。面试

2.使用单线程,避免线程竞争,也避免线程之间上下文切换消耗。redis

3.主节点和从节点之间能够复制,水平扩展,突破单机部署的限制。数据库

4.提供哨兵和集群方式,保证有节点发生故障,保存整个服务的高可用性。windows

注意:以上的优势之后都会单开章节来讨论,如今有个大概印象就行,不用死记硬背😂。服务器

redis基本安装

上面讲的是否是太空了,眼睛说记住了,脑子说没有🤣。那咱们实操下,在linux上安装redis服务,看看怎么玩?至于windows比较简单,属于开箱即用的,这边就不写了。数据结构

1.下载压缩包

先去官网下载download.redis.io/releases/安装包,建议是下载redis4。以后看底层结构也是使用的redis4。运维


redis4和redis3的区别:

1.在redis4中,string类型的底层结构针对不一样长度的字符串分为了sdshdr5,sdshdr8,sdshdr16,sdshdr32,sdshdr64等多种结构体,更加节约内存,而redis3只使用了int,embstr,raw。

2.在redis4中,持久化可使用RDB和AOF混合方式。

2.上传到服务器并解压

   经过远程管理工具,将压缩包拷贝到Linux服务器中,执行解压操做


3.进入src目录,执行make install进行安装


4.开启后台启动配置

咱们打开redis.conf文件,修改daemonize为yes,让其能在后台运行。


6.启动

进入src目录,使用redis-cli链接客户端。


redis经常使用API

string类型

1.设置值 set [key] [value] [expried time] [nx|xx]

上面表示设置key的字符串,值为value,过时时间为expried time 。nx表示不存在才能设置成功,用于新增;xx表示存在才能设置成功,用于更新。

咱们首先给str变量设置了hello,而后尝试用nx来更新str,可是发现更新失败了,由于nx表示str不存在的时候才能设置,如今str是存在的。最后用xx来更新,发现是更新成功的。


2.获取值 get key


3.批量设置值 mset [key value] [key value] [key value]

数据设置进去按组来划分的,每一个key对应一个value,当设置成功后查询发现,出来是乱码,不是咱们设置的中文。


其实这不是乱码,只是客户端显示问题,咱们只须要在启动客户端的时候加上--raw,指定其显示格式便可。


4.批量获取值 mget [key] [key] [key]


hash类型

1.设置值 hset key field value


2.获取值hget key field,效果如上

3.批量设置值 hmset key [field] [value] [field] [value]


4.批量获取值 hmget key [field] [field] [field]


5.获取某个key全部的fields hkeys key


list类型

1.从list的左侧插入新数据 lpush key value

在list列表的左侧插入三个元素a,b,c,返回值为当前list的长度3。


2.从list的右侧插入新数据 rpush key value

在list列表的右侧插入两个元素d ,e,返回值为当前list的长度5。


3.查询list的全部元素

这边须要注意的是往左节点插入的三个元素顺序,lpush每次将新元素插入到列表的头部,因此顺序为 c,b,a。


4.获取列表长度llen key


5.从左侧删除元素 lpop key

删除链表的第一个元素,返回值为删除的元素值c。再查询下list如今的元素,分别是b,a,d,e。


6.从右侧删除元素 rpop key

与上面从左侧删除元素同样,返回值也为删除的元素。


7.删除指定元素 lrem key count value

删除指定元素,重点是count,这边count分为三种状况:

1).当count>0,从左到右,最多删除count个元素。

2).当count<0,从右到左,最多删除count个元素。

3).当count=0,删除全部知足条件的元素。


set类型

1.添加元素 sadd key[field] [field] [field]

往myset1中插入三个字符串,分别是hello,world,java,返回值为插入成功的数值。

2.删除元素 srem key [field] [field]


3.计算元素个数 scard key


4.判断元素是否存在sismember key [field]

以前删除了myset中的hello元素,因此第一条语句的返回值为0,表示不存在。而world没有删掉,因此返回值为1,表示存在。


5.获取全部的元素sismembers key


6.集合之间的并集sunion [key] [key]

咱们先看myset1和myset2的数据,而后使用sunion来获取他们的并集。


7.集合之间的交集 sinter [key] [key]


8.集合之间的差集 sdiff [key] [key]

这边要注意key的先后区别,若是是sdiff myset1 myset2,意思是myset1除去二者的交集,因此结果是world和cc。


若是反之,亦然。


zset类型

1.添加元素 zadd key [score member] [score member]


2.计算长度 zcard key


3.计算排名 zrank key member(zrevrank key member)

myzset中一共有三名学生,张三,李四,王五,他们分数分别为80分,90分,70分,那他们的排序是第一名李四90分,第二名张三80分,第三名王五70分。

zrank表示正排名,返回值为下标。zrevrank表示逆排名,返回值也是下标。


结语

这篇主要是Redis的入门课程,主要从Redis是什么,哪些优势,Linux上如何快速安装,常见的数据结构和API使用。强调的是先从整体入手,对其有个大概印象,了解其和关系型数据库的区别。至于一些常见数据类型的适用场景,底层设计,咱们下偏见。

若是以为写得还行,麻烦给个赞👍,您的承认才是我写做的动力!

若是以为有说的不对的地方,欢迎评论指出。

好了,拜拜咯。

求个关注

参考资料

redis 中文存储乱码问题

Redis开发与运维

Redis深度历险:核心原理与应用实践