上海网站建设的网站,长春高铁站,货源之家,wordpress显示阅读量文章目录 认识redisredis的主要特点redis的特性#xff08;优点#xff09;redis是单线程模型#xff0c;为什么效率这么高#xff0c;访问速度这么快redis应用场景redis不可以做什么MySQL和Redis对比启动RedisRedis客户端Redis重要文件及作用 认识redis
redis里面相关的小… 文章目录 认识redisredis的主要特点redis的特性优点redis是单线程模型为什么效率这么高访问速度这么快redis应用场景redis不可以做什么MySQL和Redis对比启动RedisRedis客户端Redis重要文件及作用 认识redis
redis里面相关的小命令 fulshall清空redis数据库类似于mysql里面的drop database; 一. 内存中存储数据(内存级数据库) redis相比MySQL的优势MySQL数据库最大的问题在于访问速度是比较慢的(很多互联网产品中对于性能要求是很高的)。redis作为数据库使用定性的角度来看是很快的但是很难定量去衡量。 redis相比MySql的劣势存储空间是有限的(内存的空间毕竟是少的)。 虽然有不少互联网产品对于性能的要求是比较高的。更多的互联网产品对于性能的要求没那么高。所以要设计又大又快的数据库典型的方案是可以把redis和mysql结合起来使用(“二八原则”20%的热点数据能满足80%的访问需要)。虽然结合起来使用使得系统的复杂度程度大大提升了。而且如果数据发生修改还涉及到redis和mysql之间的数据同步的问题。 二. cache 速度快。可能会有人问定义变量不就是在内存中存储数据吗 redis是在分布式系统中才能发挥威力的~~如果只是单机程序直接通过变量存储数据的方式确实是比使用redis更优的选择。为什么在分布式系统中会更有优势的呢 不同的主机之间的通信其实还是不同的进程之间的通信。又因为进程之间具有隔离性(利用网络)redis就是基于网络的可以把自己内存中的变量给别的进程甚至别的主机的进程进行使用。 三. redis的初心 最初就是用来作为一个“消息中间件”的(消息队列)。分布式系统下的生产者消费者模型。当前很少会直接使用redis作为消息中间件(业界有更多更专业的消息中间件使用)。 RedisRemote Dictionary Server是一个基于客户端-服务器架构的存储数据的中间件。它是一种内存数据库属于NoSQL非关系型数据库的一种可用于作为数据库缓存/会话存储消息队列。它通常被用作中间缓存层将频繁访问的数据存储在内存中从而大幅提升读取性能。上文所说的主从分离/冷热分离架构中的缓存服务器就可以用Redis来实现以提高热点数据的读取性能 redis的主要特点
1.键值存储Redis使用简单的键值对**K-V数据模型**。每个键都与一个唯一的值相关联通过键可以快速访问和操作对应的值。
2.内存存储Redis将数据保存在内存中以实现高速的读写操作还引入了IO多路复用一个线程管理多个socket。这使得Redis能够实现非常低延迟和高吞吐量的数据访问
3.可编程的可直接通过简单的交互式命令进行操作也可通过脚本的方式批量执行操作
4.可扩展Redis提供了一组API在原有的功能上进行扩展以支持更多的数据结构命令通过几个语言编写Redis扩展本质上是一个动态链接库windowsdll Linux.so
5.持久化与备份提供持久化功能将数据写入磁盘或其他持久存储介质。此外一些RDS还支持数据备份和恢复功能以防止数据丢失
Redis提供了两种持久化⽅式RDB和AOF即可以⽤两种策略将内存的数据保存到硬盘中 6.支持集群支持水平扩展类似于分库分表将数据分片到多个节点上以提高存储和处理能力
7.高可用性Redis支持主从复制Master-Slave Replication和哨兵Sentinel机制以提供数据的高可用性和容错能力。通过配置主从复制和哨兵节点Redis可以实现自动故障恢复和故障转移 redis的特性优点
1.通过数据结构在内存当中存储数据
MySQL主要是通过 表的方式来存储组织数据的它是关系型数据库Redis主要是通过键值对的方式来存储组织数据的它是非关系型数据库
2.可编程的
针对redis的操作可以直接通过简单的交互式命令来操作也可以通过一些脚本的方式执行一些操作
3.可拓展性
Redis提供了一组api可以在redis原有的功能基础上再进行拓展比如redis本身已经提供了很多数据结构和命令但是通过拓展可以让redis支持更多的数据结构和命令
4.持久化
因为redis为了快速访问是把数据存储到内存上的然而内存的数据是比较容易丢失的进程退出/系统重启都可能会导致内存数据丢失但是Redis还会把数据存储到硬盘上硬盘相当于对内存当中的数据备份了一下如果redis重启了就会在重启的时候加载硬盘当中的备份数据使redis的内存数据恢复到重启前的状态但是主要的CRUD操作还是在内存当中进行的为的是保证访问速度
5.集群
redis作为一个分布式系统的中间件一个redis能存储的数据使有限的因为内存的空间是有限的引入多个主机部署多个redis节点每个redis存储数据的一部分
6.高可用 冗余 / 备份
redis自身也是支持 主从结构的从节点相当于是主节点的备份
redis是单线程模型为什么效率这么高访问速度这么快
1.因为redis数据存储到内存当中就比访问硬盘的数据库要快很多
2.redis的核心功能都是比较简单的逻辑都是比较简单的操作内存的数据结构并且redis是单线程模型避免了不必要的线程竞争开销
3.从网络角度上处理网络IO的时候redis使用了IO多路复用的方式epoll使用一个线程管理很多个socket
4.使⽤了单线程预防了多线程可能产⽣的竞争问题减少了不必要的线程之间的竞争开销
Redis在6.0版本引⼊了多线程机制但主要也是在处理⽹络和IO不涉及到数据命令即命令的执⾏仍然采⽤了单线程模式多线程提高效率的前提是CPU密集型的任务此时使用多个线程可以充分的利用CPU多核资源
5.redis是使用C语言实现的距离”操作系统更近执⾏速度相对会更快 【但是MySQL也是用C语言实现的但是MySQL比redis慢在同样都是C语言实现的前提下很难说是因为redis基于C语言实现的所以redis执行速度更快】 redis应用场景
1.实时的数据存储(Real-time data store)可以将 Redis 当作数据库。适用于对性能要求高的业务场景
大多数情况考虑到数据存储有限考虑的是存储空间足够大但是有一些场景考虑的是快如果把redis作为数据库那么此时redis存储的是全量数据数据不能随便丢失
2.作为缓存/会话存储(Caching session storage)MySql存储数据空间大但是读取速度慢满足不了缓存的要求所以可以将热点数据放到redis当中
此时redis存储的是部分数据全量数据以MySQL为主哪怕redis当中数据没了仍然可以从MySQL再加载回来 例子会话存储 会话存储时使用cookie用来存储用户信息的身份标识sessionId 存储在浏览器这边的身份标识但是还需要session配合 存储在应用服务器当中的 如果在应用服务器当中保存会话信息 此时导致的问题当客户端通过负载均衡器访问到服务器进行登录操作登录成功之后在服务器当中生成一个session会话信息但是当客户端再次访问服务器的时候通过负载均衡器可能会将该请求派发到其它服务器当中而该服务器可能并没有该用户的会话信息 解决办法 1.更改负载均衡算法将同一个用户的请求始终打到同一个机器上
2.将会话数据单独放到一台机器上进行存储好处是如果应用程序重启了会话并不会丢失 Redis真正存储了用户信息。无论负载均衡器将登录请求分担给哪个应用服务器都能从Redis中获取到会话
3.消息队列服务器(Streaming messaging)可以实现网络版的生产者-消费者模型优势解耦合削峰填谷
注意由于是使用内存来存储数据不能使用Redis存储大规模数据考虑使用其它数据库 场景1排行榜系统 排⾏榜系统⼏乎存在于所有的⽹站例如按照热度排名的排⾏榜按照发布时间的排⾏榜按照各种复杂维度计算出的排⾏榜Redis提供了列表和有序集合的结构合理地使⽤这些数据结构可以很⽅便地构建各种排⾏榜系统 场景2计数器应用 计数器在⽹站中的作⽤⾄关重要例如视频⽹站有播放数、电商⽹站有浏览数为了保证数据的实时性每⼀次播放和浏览都要做加1的操作如果并发量很⼤对于传统关系型数据的性能是⼀种挑战。Redis天然⽀持计数功能⽽且计数的性能也⾮常好可以说是计数器系统的重要选择 场景3社交网络 赞?踩、粉丝、共同好友/喜好、推送、下拉刷新等是社交⽹站的必备功能由于社交⽹站访问量通常⽐较⼤⽽且传统的关系型数据不太合适保存这种类型的数据Redis提供的数据结构可以相对⽐较容易地实现这些功能 redis不可以做什么
站在数据规模的⻆度看数据可以分为⼤规模数据和⼩规模数据。Redis的数据是存放在内存中的虽然现在内存已经⾜够便宜但是如果数据量⾮常⼤例如每天有⼏亿的⽤⼾⾏为数据使⽤Redis来存储的话基本上是个⽆底洞经济成本相当⾼
因为redis是使用内存来存储数据的所以redis不能存储大规模数据
站在数据冷热的⻆度数据分为热数据和冷数据热数据通常是指需要频繁操作/访问的数据反之为冷数据。如果将这些冷数据放在Redis上基本上是对于内存的⼀种浪费但是对于⼀些热数据可以放在Redis中加速读写也可以减轻后端存储的负载 MySQL和Redis对比
Redis属于一种NoSQL数据库
1.数据模型
MySQL是关系型数据库管理系统RDBMS使用表格来组织数据并使用结构化查询语言SQL进行数据操作。数据以行和列的形式存储且需预定义数据模式和数据类型。NoSQL是非关系型数据库其数据模型可以是键值对Key-Value、文档Document、列族Wide-Column或图形Graph等。NoSQL数据库更加灵活不需要预定义固定的数据模式
2.拓展性
MySQL在水平扩展时存在一些限制常规部署通常是单机或主从复制架构。虽然可以通过分区和分片等技术来提高性能和可伸缩性但相对较复杂。NoSQL数据库通常天生具备可伸缩性易于构建分布式集群可以通过添加更多节点来水平扩展以应对大规模数据和高并发访问的需求。
3.强一致性和灵活性
MySQL支持强一致性即保证所有读取操作都能看到最新的写入操作。通过事务和锁机制确保数据一致性和完整性。NoSQL数据库中的一些类型如键值对存储可能会放宽一致性要求以换取更高的性能和可用性。这种弱一致性模型在某些场景下更加适用。
4.查询复杂性
MySQL作为关系型数据库支持SQL语言进行复杂查询可以执行连接操作、聚合函数和多表关联等。NoSQL数据库的查询方式相对简单通常使用键值对或类似于JSON的查询语法。它们更适合于数据访问模式简单、数据结构扁平化的场景。 如果需要强大的事务支持、复杂查询和一致性保证以及已经有现有的SQL架构和工具链那么MySQL是一个不错的选择。对于大规模数据、高并发和灵活的数据模型以及更容易进行水平扩展的需求可以考虑使用NoSQL数据库。也可以在特定场景中将两者结合使用如使用MySQL作为主数据库然后使用NoSQL数据库作为辅助或缓存数据库来提升性能。 启动Redis
centos启动redis命令sudo redis-server /etc/redis/redis.conf
ping与redis服务做心跳测试服务端正常的话会返回pong 如果想要关闭redis使用netstat或者ps查询得到redis的服务器的进程id再进行kill即可
注意修改了配置文件需要重启redis才能生效 Ubuntu 重新启动redis服务器 service redis-server restart查看redis服务器的状态service redis-server status Centos 通过netstat 或者ps查询redis服务器的进程id然后再使用kill杀掉该进程 Redis客户端
Redis也是一个基于客户端-服务器Client-Server架构的内存数据库自带的命令行客户端可通过命令直接启动
redis-cli -h host -p porthost 是Redis服务器的主机名或IP地址port 是Redis服务器监听的端口号。由于当前我们连接的服务器位于127.0.0.1端口默认使用的是6379所以可以直接使用redis-cli来启动Redis客户端 注意redis的“快”是相对于mysql这类关系型数据库的如果是直接和内存中的操作变量相比就没有优势甚至更慢了
比如针对单机系统应用程序要存储K-V结构的数据那么使用redis还是map更好呢引入redis一定是比直接使用map更慢的因为map是直接操作内存redis是先通过网络再操作内存的 Redis重要文件及作用
/usr/bin/redis-benchmark
/usr/bin/redis-check-aof - /usr/bin/redis-server
/usr/bin/redis-check-rdb - /usr/bin/redis-server
/usr/bin/redis-cli
/usr/bin/redis-sentinel - /usr/bin/redis-server
/usr/bin/redis-server
/usr/libexec/redis-shutdownredis-server是Redis服务器程序 redis-check-aof是修复AOF⽂件⽤的⼯具 redis-check-rdb是修复RDB⽂件的⼯具redis-sentinel是Redis哨兵程序redis-benchmark⽤于对Redis做性能基准测试的⼯具redis-shutdown是⽤于停⽌Redis的专⽤脚本 配置文件 /etc/redis-sentinel.conf 是Redis Sentinel的配置⽂件
/etc/redis.conf 是Redis服务器的配置⽂件持久化⽂件存储⽬录 /var/lib/redis/ Redis持久化⽣产的RDB和AOF⽂件都默认⽣成于该⽬录下