首页 > 数据库 >Redis简介

Redis简介

时间:2023-08-29 12:34:07浏览次数:59  
标签:单线程 简介 数据库 redis 内存 Redis 数据



文章目录

  • 一、Redis是什么?
  • 二、Redis优缺点?
  • 三、Redis应用场景
  • 四、Redis安装和使用
  • 五、Redis为什么这么快?
  • 1、为什么采用单线程
  • 2、Redis的I/O多路复用


一、Redis是什么?

Redis(Remote Dictionary Server:远程字典服务)是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API的非关系型数据库。

传统数据库遵循 ACID 规则。而 Nosql(Not Only SQL 的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称) 一般为分布式,而分布式一般遵循 CAP 定理。

二、Redis优缺点?

【优点1—性能出色】:

Redis本质上是一个Key-Value类型的内存数据库,整个数据库统统加载在内存当中进行操作定期通过异步操作把数据库数据flush到硬盘上进行保存。

因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过10万次读写操作,是已知性能最快的Key-Value DB。

【优点2—支持多种数据结构】:

Redis最大的魅力是支持保存多种数据结构此外单个value的最大限制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能。

【缺点1–容量受限】:

Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。

【缺点2–只能使用单线程】:

Redis只能使用单线程。

三、Redis应用场景

  • 做热点数据的缓存(Redis提供持久化),适合经常用来被查,不经常修改或删除的数据。网站访问数据的特点大多数呈现在"二八定律":80%的业务访问集中在20%的数据上。这时为了减轻数据的压力和提高网站的数据访问速度,则可以使用缓存机制来优化网站。如一个小说网站,每天有100W人访问某部小说中的某篇文章,这篇文章若是从数据库那拿,每天都要消耗100W次数据库请求,这样很消耗数据库资源,若把这篇文章放入redis,数据库资源消耗小,性能高。
  • 计数器,统计网站点击数,因为单线程,可以避免并发,而且性能高。
  • 排行榜,统计比赛排名,或者活跃度排名。
  • 消息中间件,和ActivitiMQ,RocketMQ类似,做消息队列,但不推荐。但是可以用来作为用户列表,比如好友列表,求集合的交集、并集、差集。
  • 重复请求的记录或秒杀系统,可以用来限制一段时间内数据的重复提交,如你要做限购商品的功能,规定一个IP当天只能买10次,一个用户名当天只能买5次,把买的次数数据记录下来,然后设置有效时间,超过次数的不准买。也可用在秒杀系统,记录商品库存,卖掉一次就在Redis减库存,因为Redis的操作是原子性的。
  • 发布订阅功能,关注的某个公众号或者版主发布了新的文章,直接推送到每一个订阅用户。

四、Redis安装和使用

1、更新源并安装redis
sudo apt-get update
sudo apt-get install redis-server

2、查看版本
redis-server -v 

3、修改配置文件,注释掉bind 127.0.0.1
/etc/redis/redis.conf 

4、重启redis-server
sudo service redis-server restart

5、查看 redis 是否启动,输入ping(测试Redis的连通性),回复pong
redis-cli

五、Redis为什么这么快?

Redis采用的是基于内存的采用的是单进程单线程模型的 KV 数据库,由C语言编写,官方提供的数据是可以达到每秒10万+查询次数。主要设计如下:

  • 完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。
  • 采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作。
  • 使用多路I/O复用模型,非阻塞IO。

1、为什么采用单线程

我们对多线程的第一印象就是多线程要快些,是哪方面快 ?很多人都能想到是计算能力,没错,我们对cpu的利用率提高了。那么我们设想下独立模式下单台redis的性能瓶颈是什么了?

我们知道Redis是基于内存的操作CPU不是Redis的瓶颈,其实Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了。(毕竟采用多线程会有很多麻烦!)。

2、Redis的I/O多路复用

传统的Blocking IO操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的,所以 I/O 操作在一般情况下往往不能直接返回,这会导致某一文件的 I/O 阻塞导致整个进程无法对其它客户提供服务。

而 I/O 多路复用就是为了解决这个问题而出现的。这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程。采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络 IO 的时间消耗)。

I/O多路复用实际上就是用select, poll, epoll技术等监听多个IO对象,当IO对象有变化(有数据)的时候就通知用户进程。好处就是单个进程可以处理多个socket。


标签:单线程,简介,数据库,redis,内存,Redis,数据
From: https://blog.51cto.com/u_6526235/7274943

相关文章

  • redis高级用法:慢查询、pipline与事务、发布订阅、bitmap位图、HyperLogLog、GEO地理位
    目录一高级用法之慢查询1.1生命周期1.2两个配置1.2.1slowlog-max-len1.2.2slowlog-max-len1.3设置慢查询1.5作用二pipline与事务2.1什么是pipeline(管道)2.2python客户端实现pipline2.3与原生操作对比2.4使用建议2.5原生redis操作操作事务三发布订阅3.1角色3.2模......
  • redis数据类型和使用命令
    目录一通用命令1.1通用命令1.2数据结构和内部编码1.3单线程架构,二字符串类型2.1字符串键值结构2.2常用命令三hash类型3.1哈希值结构3.2常用命令3.3hashvsstring四列表类型4.1列表特点常用命令五集合类型5.1特点5.2常用命令六有序集合类型6.1特点6.2常用命令......
  • Redis介绍跟安装配置
    目录一redis介绍1.1redis是什么1.2redis的特点二centos上安装redis三redis启动方式3.1最简启动3.2动态参数启动(了解)3.3配置文件启动一redis介绍1.1redis是什么开源:早起版本2w3千行基于键值对的存储系统:字典形式多种数据结构:字符串,hash,列表,集合,有序集合高性能,功......
  • redis客户端操作
    目录一redis客户端操作二redis使用场景一redis客户端操作#客户端链接 redis-cli-h地址-p端口#非交互式的 res=subprocess.getoutput('systemctlstartmysqld')res=subprocess.getoutput('systemctlstopmysqld')res=subprocess.getoutput('redis-clige......
  • redis分布式锁,setnx+lua脚本的java实现 | 京东物流技术团队
    1前言在现在工作中,为保障服务的高可用,应对单点故障、负载量过大等单机部署带来的问题,生产环境常用多机部署。为解决多机房部署导致的数据不一致问题,我们常会选择用分布式锁。目前其他比较常见的实现方案我列举在下面:基于缓存实现分布式锁(本文主要使用redis实现)基于数据库实现分布......
  • Redis常用命令
    目录起因配置bind端口连接开启连接关闭连接命令key相关字符串相关hash相关List相关Set相关SortedSet相关GEO相关服务器命令引用起因从标题来看,似乎这篇博文没有看下去的必要了,谁用redis还敲命令行,不都是GUI嘛。确实,GUI现在特别的好用,直观、高效还美观。但是,在生产环境下GUI可......
  • Redis基础
    1.Redis5种数据类型string(字符串)hash(哈希散列)list(列表)set(集合)zset(sortedset:有序集合)2.对应的基本操作2.1Stringvalue:最大为512Msetnamezhangsangetname2.2hash最多属性字段为2的32次方-1个hmsetuserid:1namezhangsanage1hmgetalluserid:1hmgetu......
  • 基于Redis的队列
    1.队列//发布@ApiOperation(value="put普通队列")@PostMapping("/queuePut")publicObjectput(@RequestBodyCommonMapRespDTOrespDTO){for(inti=0;i<20;i++){//队列RQueue<Object>queue=redissonClient.g......
  • Redis 入门篇
    1.初始Redis1.1认识NoSQL‍NoSql可以翻译做NotOnlySql(不仅仅是SQL),或者是NoSql(非Sql的)数据库。是相对于传统关系型数据库而言,有很大差异的一种特殊的数据库​,因此也称之为非关系型数据库。‍1.1.1结构化与非结构化‍​​1.1.2关系型与非关系型的差异存储方式......
  • redis 消息队列方案
    List实现消息队列使用LPUSH、RPOP左进右出或RPUSH、LPOP右进左出,实现消息顺序消费使用BLPOP、BRPOP这种阻塞式读取的命令,实现消息及时消费ack机制使用,使用index读取list的消息,正常消费完成后再使用POP删除//使用redission实现@Slf4j@ServicepublicclassQue......