当前位置: 首页 > news >正文

Redis:介绍和认识,通用命令,数据类型和内部编码,单线程模型

介绍和认识

Redis是一个基于内存的,高性能的,支持许多数据类型的NoSQL数据库,可以持久化,也支持分布式。

在许多的互联网产品中,对于数据库的访问速度要求很高,例如Mysql数据库无法满足其要求,这时候Redis可以作为数据库来进行访问,因为Redis是通过内存进行存储,比Mysql在硬盘中存储的访问速度快了很多。

Redis就是基于网络进行通信,可以把自己内存中的变量给别的线程,甚至别的主机进行使用(Redis是一个运行在某台主机上的服务进程,将数据保存在自己的内存中,然后通过网络提供服务,其他的线程,进程,主机都可以通过网络连接访问这些内存数据,像是调用远程变量一样)。

有些服务将Mysql和Redis结合起来一起使用(二八原则),百分之二十的热点数据,能满足百分之八十的需求。

Redis是内存中存储数据的中间键,通过内存进行存储,用于作为数据的缓存。

Redis是通过键值对来组织存储的非关系型数据库

Mysql是通过表的方法来组织存储的关系型数据库。

Redis的持久化,Redis是将数据存储到内存中的,为了防止关机,重启使数据丢失,Redis会将数据备份到硬盘中,内存为主,硬盘为辅

Redis快的原因:

  • 通过内存进行存储,比访问硬盘的数据库快了很多。
  • Redis的核心功能都是简单的逻辑关系
  • 在网络的角度上,Redis使用的是IO多路复用的方式(epoll),使用一个线程,管理多个socket
  • Redis使用的是单线程模式,避免了线程之间不必要的竞争开销

Redis的安装

我是在Ubuntu下进行的安装

使用apt进行安装

apt install redis -y

启动Redis

 service redis-server start

 记得修改.conf配置文件中的

将其修改为

注:之前的是只允许访问本机,不能跨机器进行访问

使用redis自带的客户端来连接服务器

redis-cli

Redis的通用命令

set

通过键值对的形式(key和value)进行存储

将a1的值设置为v1

set a1 v1

get

根据key来取value

get a1

 

如果得到一个不存在的key将会得到nil,表示为空

Redis的全局命令

全局命令就是能够搭配任意的数据结构来使用的命令

Redis支持很多种数据类型,简单的来说,Redis就是键值对的结构,key就是字符串,value对应的就是各种的数据类型(hash,String,set,list等)

keys

用来查找满足匹配类型的key(满足样式的key)

?匹配任意单个字符

* 匹配0个或者多个任意字符

[a  c  b] 匹配满足[]内的字符

[^a] 排除a字符,其他都满足

[a-c]a-c之间的字符满足

exists

判断某个key是否存在

redis自身的键值对,是通过哈希表进行组织的

del

删除指定的key 

expire

为指定的key设置过期时间,单位是秒

key存活超过这个指定的存活时间,就会被自动的删除

ttl

查看指定key的存活时间

 

redis的key的过期策略是如何是实现的

  • 1.定时删除,设置key的过期时间,到过期时间,自动删除key
  • 2.惰性删除,通过命令访问key,Redis会检查可以是否过期,如果过期,会直接进行删除,并返回null
  • 3.定期删除,Redis每隔一段时间会挑选一批设置了过期时间的key,检查是否过期,如果超过一定比例的key过期,则会加速删除的频率,直到比例下降

type

返回key的数据类型

 

数据类型和内部编码

 

查看内部编码

Redis的单线程模式 

Redis只使用一个线程,处理所有的命令请求,不是说Redis服务器进程内部真的只有一个线程,其实也有多个线程,多个线程是在处理网络IO。

如果多个客户端同时对Redis发送了请求,Redis对多个请求采用串行执行,一个接着一个执行

注:Redis特别需要注意,如果一个操作占用太长的时间,就会堵塞其他的请求。

 

Redis是单线程模型,为什么访问那么快

1.Redis访问内存,数据库直接访问硬盘

2.Redis的核心功能,比Mysql的核心功能更加的简单,不像数据库中有各种约束,会使其做额外的工作

3.Redis是单线程模式,避免了多线程之间不必要的竞争开销

4.处理网络IO,使用expoll这样的IO多路复用机制,一个线程可以管理多个socket

希望能对大家有所帮助!!!!!!

相关文章:

  • Hive中ORC存储格式的优化方法
  • 11 - ArcGIS For JavaScript -- 高程分析
  • day38 6月5号
  • golang 如何定义一种能够与自身类型值进行比较的Interface
  • ignore文件不生效的问题
  • JVM垃圾回收器-ZGC
  • 【赵渝强老师】Docker的图形化管理工具
  • 行内样式:深入解析与应用指南
  • SpringCloud——OpenFeign
  • 大模型的开发应用(七):大模型的分布式训练
  • AtCoder-abc408_b 解析
  • snprintf函数用法及注意事项详解
  • 【鸿蒙在 ETS (Extendable TypeScript) 中创建多级目录或文件,可以使用鸿蒙的文件系统 API】
  • 力扣刷题Day 71:搜索旋转排序数组(33)
  • Win10、Win11系统,使用谷歌浏览器文件流下载,C盘剩余容量小于4GB时,下载失败问题
  • 我的创作纪念日——聊聊我想成为一个创作者的动机
  • 25.6.5学习总结
  • 风机下引线断点检测算法实现
  • 系统思考持续训练
  • 【Redis】笔记|第10节|京东HotKey实现多级缓存架构
  • 前程无忧网广州网站建设分类岗位/建网站建设
  • 京东物流网站建设特点/企业如何网络推广
  • 网站开发后端用什么/seo的方式包括
  • wordpress搬站/抖音引流推广怎么做
  • 网络培训的网站建设/今日重点新闻
  • 什么什么设计英文网站/百度一下首页网页手机版