Redis入门

一.Redis(以键值对组织数据库)

作用:内存中存储数据

注:Redis是在分布式系统中才能发挥出真正的威力

二.浅谈分布式系统:

1.单机架构:

是什么:单机架构就是即有一台服务器,这台服务器负责所有工作

2.分布式系统:

是什么:多台服务器

3.负载均衡:

是什么:负责分均用户请求

作用:用算法平均公正讲用户请求分到多台应用服务器

4.数据库读写分离:

服务器遵从"一主(写)多从(读)"--------"从节点"需要从"主节点"同步数据

5.引入缓存(Redis)

数据分类:1.冷数据. 2.热点数据

即在内存存数据:遵循二八原则(20%的数据能支持80%的访问量)

6.数据库分表分类:

作用:应对更大的数据量

7.微服务:

作用:1.使用微服务,可便于功能的复用.

2.给不同服务进行不同部署

3.解决了团队协作与组织问题

三.环境搭建-redis客户端介绍

1.Redis是一个客户端-服务器结构的程序

四.Redis实战操作(Redis常见命令)

1.Redis中最核心的两个命令:get(查)和set(存)

Redis里存的是键值对:key-value

key是String类型,而value类型有多种(字符串,哈希表,列表,集合,有序集合)后续展开

2.Redis全局命令:就是能够搭配任意一个数据结构来使用的命令

1)keys命令:用来查询当前服务器上匹配的key

语法:keys pattern

例如:keys * (慎用)

注:在生产环境上,一般会禁止用keys命令,尤其是大杀器keys *

2)exists命令:判定key是否存在

语法:exists key key...

3)del命令:删除key

语法:del key key...

4)expire命令:给指定key设置过期时间,到时就删

语法:expire key seconds ,单位:秒(s)

pexpire key milliseconds ,单位:毫秒(ms)

5)ttl命令:查看指定key的过期时间

语法:ttl key ,一般与expire搭配使用,单位(s)

pttl key ,单位(ms)

返回值N: >=0-->还有N秒key过期

-1 -->key存在,永不过期(没设置过期时间)

-2 -->key不存在

6)type命令:返回key对应的value 的数据类型(五大数据类型)

语法:type key

⭐️3.Redis经典面试题

问:redis的key的过期策略是怎么实现的?

答:redis整体的策略有二:1.定期删除 2.惰性删除 (二者结合来进行)

1.定期删除:Redis 每隔一段时间,随机抽一批 key(包含过期与没过期)检查有没有过期,过期就删掉.

2.惰性删除:假设这个key已经到过期的时间了,但是暂时没有访问到这个过期的key,key仍存在,在后续,在下一次被访问到这个key时,检查到过期了,于是这次访问就会让redis服务器除法删除这个key的操作,同时返回一个null.(若仍需要这个key,则需手动取数据库里查再重新设置)

总结**:二者删过期的key的方式一样,都是检测到key过期了就删,只是删key的时机不一样**

4.定时器的实现原理:(了解)

定时器是在某个时间到达之后,执行指定任务的功能

1)基于优先级队列/堆

2)基于时间轮实现的定时器:把时间划分成很多歌小段,每个小段挂着一个链表,每个链表代表一个任务

注:redis并未采取这两种方案,redis的定时器就是他对key 的过期的策略(定期删除和惰性删除)

五.常用数据结构:

  1. key(string): "abcd" --->字符串(String)

:field value --->哈希表 (Hash)

:a,b,甲,乙 --->列表(List)

:苹果,香蕉,西瓜 --->集合(Set)

:99.0-关羽 98.0-刘备 97.0张飞--->有序集合

2.编码方式:同一个数据类型,背后可能的编码实现方式是不同的,会根据特定场景优化,比如根据value的大小,使用不同的编码方式

六.关于单线程模型:

单线程模型的工作流程:redis只使用一个线程,处理所有的命令请求

⭐️七.Redis必考面试题:

问:redis为什么相较于MySQL等数据库跟快?

答:

1.redis访问内存,数据库访问硬盘

2.redis核心功能,比数据库的核心功能跟简单

3.redis 是单线程模型,避免了不必要的线程竞争开销

4.处理网络IO时,使用了epoll这用的IO多路复用机制

(IO 多路复用机制就是单个线程借助内核,同时监听多个网络连接,有事件就处理、无事件就阻塞等待,实现单线程高并发,是 Redis 单线程能扛大量客户端的底层核心。)

相关推荐
码出钞能力30 分钟前
apache-shardingsphere-5.5.3自定义分片算法
数据库
兜有米啦1 小时前
数据库第二次作业
数据库
nVisual2 小时前
机柜PDU安装位置与空间建模方案
大数据·网络·数据库·信息可视化·数据中心基础设施管理
weixin_6682 小时前
Cursor-superpowers插件用法
数据库·人工智能
流星白龙2 小时前
【Redis】8.List列表
redis
NWU_白杨2 小时前
三种常用的数据存储技术
数据库·redis·mysql·sqlite
我叫黑大帅2 小时前
我为什么单一消费者的场景下,要用 Redis List 当消息队列?
redis·后端·面试
吃饱了得干活2 小时前
亿级订单表分库分表设计,从0到1全流程
java·数据库·面试
蓝创工坊Blue Foundry2 小时前
图片文字提取到 Excel:批量任务如何先定义要交付的字段
运维·服务器·开发语言·数据库·自动化·ocr·excel
麦聪聊数据2 小时前
企业数据市场建设(三):API 化服务封装,让数据开箱即用、避免重复开发
数据库