Redis基础学习之原理和使用

举报
多米诺的古牌 发表于 2022/02/21 11:16:39 2022/02/21
【摘要】 1.Redis的原理Redis是单进程、单线程、单实例处理用户请求的,在高并发请求的时候为何还是会处理的很快?原因Redis是使用Linux物理机内核中epoll这种多路复用的系统调用概念进行处理的。而epoll概念是一种物理机内核的系统调用概念,是同步非阻塞的多路复用的,是通过遍历哪些有数据就去使用谁。由于redis是单进程单实例的,在处理请求时是通过epoll将请求进行排列成一个链表,然...

1.Redis的原理

Redis是单进程、单线程、单实例处理用户请求的,在高并发请求的时候为何还是会处理的很快?原因Redis是使用Linux物理机内核中epoll这种多路复用的系统调用概念进行处理的。而epoll概念是一种物理机内核的系统调用概念,是同步非阻塞的多路复用的,是通过遍历哪些有数据就去使用谁。由于redis是单进程单实例的,在处理请求时是通过epoll将请求进行排列成一个链表,然后按顺序进行使用。

ps -fe | grep redis 查看Redis的启动信息,比如端口号等信息。

redis-cli来启动客户端,每个redis默认是有16个互相隔离的库组成,可通过加参数-n,比如 redis-cli -n 0 访问0号库;由于一台物理机中可以存在多个redis进行 可以通过 -p 参数指定要启动的端口号的redis进程

2.Redis的使用

2.1 Redis默认的16个互相隔离的库

2.1.1 举个栗子,给1号库设置库key为test111,值为12345,执行的指令是 set test111:1 12345

此时可以看到通过设置key为test111,并且通过冒号指定是存入1号库,直接访问时是访问的0号库,所以会出现nil访问不到的情况,改为test111:1查询1号库就能看到我们设定的值12345了,再次也验证了库是互相隔离的。

2.1.2 如何访问指定库

可以通过select 指定库的编号进行访问,比如访问2号库,执行指令是select 2,再执行get test111:1,可以看到并没有值nil,再次也验证了库是互相隔离的。

2.1.3 查看所有的key值,执行指令是 key *

2.2 常用的指令

2.2.1  FLUSHALL或者 FLUSHDB是清库操作,谨慎操作!

2.3 key中的相关方法

在判断类型的时候,不需要将数取出来再进行判断,可以在key的时候就进行判断规避异常

2.3.1 type key查看key对应的value值的类型

2.3.2 encoding 是判断value中具体的类型,因为set和get是string类型组中的方法,所以通过set设置的值他的大类型肯定是string,但是在string大类型下面还分为字符串、数值、bitmap三类,可以通过 obeject encoding查看具体的类型。(emstr是字符串类型、int是数值类型)

在string大类型下的不同类型也有他们对应的不同方法

2.3.3 string类型中的int数值类型

2.3.3.1 自增( +1 ) 和自减( -1 )

可以通过incr 自增指令执行自增+1操作,可以通过decr自减指令执行自减-1操作,但首先需要是数值类型,否则会报错,这也是redis提高效率的一种方式,在开始设置key的时候就存上对应的类型,在value值设置的时候也会保存对应的value的类型,如果类型不匹配则直接报错,规避类型处理错误。

2.3.3.2 使用指令incrby key value 设置给key对应的value增加具体的数值,使用指令decrby key value 设置给key对应的value减少具体的数值

2.3.3.3 在使用一些方法的时候会使value的类型发生变化(比如append),而另一些方法则会使value的类型固化回方法能够执行的类型(比如incr)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。