go 判断redis 是否打开 如何判断redis是否正常_字符串

前言

hello,好久不见,又断更了一段时间。同事大部分离职了,但是活还是一样,所以只能硬着头皮顶上。现在总算歇会了,决定开启Redis源码系列,希望不要啪啪啪打脸。

go 判断redis 是否打开 如何判断redis是否正常_go 判断redis 是否打开_02

什么是redis?

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

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

redis的优势

1.数据存储在内存中,读取和写入速度快。如果需要持久化,可以开启相关配置,数据定期保存在硬盘上。

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

3.主节点和从节点之间可以复制,水平扩展,突破单机部署的限制。

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

注意:以上的优点以后都会单开章节来讨论,现在有个大概印象就行,不用死记硬背?。

redis基本安装

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

1.下载压缩包

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

go 判断redis 是否打开 如何判断redis是否正常_Redis_03

redis4和redis3的区别:

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

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

2.上传到服务器并解压

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

go 判断redis 是否打开 如何判断redis是否正常_Redis_04

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

go 判断redis 是否打开 如何判断redis是否正常_linux判断redis是否启动成功_05

4.开启后台启动配置

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

go 判断redis 是否打开 如何判断redis是否正常_字符串_06

5.启动

使用redis-server启动redis,注意端口号为6379.

go 判断redis 是否打开 如何判断redis是否正常_go 判断redis 是否打开_07

6.连接客户端

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

go 判断redis 是否打开 如何判断redis是否正常_redis_08

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来更新,发现是更新成功的。

go 判断redis 是否打开 如何判断redis是否正常_linux判断redis是否启动成功_09

2.获取值 get key

go 判断redis 是否打开 如何判断redis是否正常_linux判断redis是否启动成功_10

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

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

go 判断redis 是否打开 如何判断redis是否正常_redis_11

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

go 判断redis 是否打开 如何判断redis是否正常_redis_12

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

go 判断redis 是否打开 如何判断redis是否正常_redis_13

hash类型

1.设置值 hset key field value

go 判断redis 是否打开 如何判断redis是否正常_redis_14

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

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

go 判断redis 是否打开 如何判断redis是否正常_Redis_15

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

go 判断redis 是否打开 如何判断redis是否正常_字符串_16

5.获取某个key所有的fields hkeys key

go 判断redis 是否打开 如何判断redis是否正常_linux判断redis是否启动成功_17

list类型

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

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

go 判断redis 是否打开 如何判断redis是否正常_linux判断redis是否启动成功_18

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

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

go 判断redis 是否打开 如何判断redis是否正常_linux判断redis是否启动成功_19

3.查询list的所有元素

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

go 判断redis 是否打开 如何判断redis是否正常_linux判断redis是否启动成功_20

4.获取列表长度llen key

go 判断redis 是否打开 如何判断redis是否正常_redis_21

5.从左侧删除元素 lpop key

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

go 判断redis 是否打开 如何判断redis是否正常_字符串_22

6.从右侧删除元素 rpop key

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

go 判断redis 是否打开 如何判断redis是否正常_linux判断redis是否启动成功_23

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

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

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

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

3).当count=0,删除所有满足条件的元素。

go 判断redis 是否打开 如何判断redis是否正常_字符串_24

set类型

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

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

go 判断redis 是否打开 如何判断redis是否正常_字符串_25

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

go 判断redis 是否打开 如何判断redis是否正常_Redis_26

3.计算元素个数 scard key

go 判断redis 是否打开 如何判断redis是否正常_redis_27

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

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

go 判断redis 是否打开 如何判断redis是否正常_redis_28

5.获取所有的元素sismembers key

go 判断redis 是否打开 如何判断redis是否正常_go 判断redis 是否打开_29

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

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

go 判断redis 是否打开 如何判断redis是否正常_字符串_30

go 判断redis 是否打开 如何判断redis是否正常_linux判断redis是否启动成功_31

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

go 判断redis 是否打开 如何判断redis是否正常_redis_32

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

这边要注意key的前后区别,如果是sdiff myset1 myset2,意思是myset1除去两者的交集,所以结果是world和cc。

go 判断redis 是否打开 如何判断redis是否正常_go 判断redis 是否打开_33

如果反之,亦然。

go 判断redis 是否打开 如何判断redis是否正常_redis_34

zset类型

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

go 判断redis 是否打开 如何判断redis是否正常_字符串_35

2.计算长度 zcard key

go 判断redis 是否打开 如何判断redis是否正常_Redis_36

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

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

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

go 判断redis 是否打开 如何判断redis是否正常_redis_37

结语

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

如果觉得写得还行,麻烦给个赞?,您的认可才是我写作的动力!

如果觉得有说的不对的地方,欢迎评论指出。

好了,拜拜咯。

参考资料

redis 中文存储乱码问题

Redis开发与运维

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

go 判断redis 是否打开 如何判断redis是否正常_Redis_38