`
dwj147258
  • 浏览: 194011 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

redis小结

阅读更多

什么是redis?

Redis 是一个基于内存的高性能key-value数据库。 (有空再补充,有理解错误或不足欢迎指正)

 

Reids的特点

Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。
Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,用他的Set可以做高性能的tag系统等等。另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一 个功能加强版的memcached来用。
Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。

 

Redis支持的数据类型

Redis通过Key-Value的单值不同类型来区分, 以下是支持的类型:
Strings
Lists
Sets 求交集、并集
Sorted Set 
hashes
具体的指令说明:http://code.google.com/p/redis/wiki/CommandReference


为什么redis需要把所有数据放到内存中?

Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以redis具有快速和数据持久化的特征。如果不将数据放在内存中,磁盘I/O速度为严重影响redis的性能。在内存越来越便宜的今天,redis将会越来越受欢迎。
如果设置了最大使用的内存,则数据已有记录数达到内存限值后不能继续插入新值。

另外讲讲内存中的数据如何同步到磁盘

redis在dump数据的时候,是fork子进程。redis的默认配置中,每60秒如果纪录更改数达到1万条就需要dump到硬盘中去,但实际上由于超过了这个数,我们的redis几乎不停地在dump数据到硬盘上;dump数据到硬盘时,我估计为了达到一个原子的效应,避免数据丢失,redis是先把数据dump到一个临时文件,然后重命名为你在配置文件设定的数据文件名.而前面说到,加载数据要1到2分钟,dump数据应该也在1分钟左右吧;dump出来的文件差不多1到2个G;这样,服务器几乎一直保持着每分钟写一个2G的文件的这种IO的负载,磁盘基本不闲着;

 

Redis是单进程单线程的

redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销

 

虚拟内存

当你的key很小而value很大时,使用VM的效果会比较好.因为这样节约的内存比较大.
当你的key不小时,可以考虑使用一些非常方法将很大的key变成很大的value,比如你可以考虑将key,value组合成一个新的value.
vm-max-threads这个参数,可以设置访问swap文件的线程数,设置最好不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的.可能会造成比较长时间的延迟,但是对数据完整性有很好的保证.

自己测试的时候发现用虚拟内存性能也不错。如果数据量很大,可以考虑分布式或者其他数据库

 

分布式

redis支持主从的模式。原则:Master会将数据同步到slave,而slave不会将数据同步到master。Slave启动时会连接master来同步数据。

这是一个典型的分布式读写分离模型。我们可以利用master来插入数据,slave提供检索服务。这样可以有效减少单个机器的并发访问数量

读写分离模型

通过增加Slave DB的数量,读的性能可以线性增长。为了避免Master DB的单点故障,集群一般都会采用两台Master DB做双机热备,所以整个集群的读和写的可用性都非常高。
读写分离架构的缺陷在于,不管是Master还是Slave,每个节点都必须保存完整的数据,如果在数据量很大的情况下,集群的扩展能力还是受限于单个节点的存储能力,而且对于Write-intensive类型的应用,读写分离架构并不适合。

 

                                                                 读写分离模型

数据分片模型

为了解决读写分离模型的缺陷,可以将数据分片模型应用进来。

可以将每个节点看成都是独立的master,然后通过业务实现数据分片。

结合上面两种模型,可以将每个master设计成由一个master和多个slave组成的模型。

 

redis的性能

这是官方给出的数据:SET操作每秒钟 110000 次,GET操作每秒钟 81000 次。

实验中模拟了20个客户端对redis进行写操作。当数据库中的数据达到G数据级时,写速度会有明显的下降。

可能的原因: 1、redis需要将数据同步到磁盘,占用了大量的CPU和内存; 2、key数量增大,需要重新布局; 3、消息队列中还存在大量请求,致使请求阻塞。

分享到:
评论

相关推荐

    Redis安装与使用方法小结

    Redis是一款高性能的键值存储系统,常用于缓存和数据持久化。本文将详细介绍Redis的安装与使用方法,包括从下载、安装、启动、测试、持久化策略、开机启动、安全配置、命令行模糊查询以及设置键的过期时间等方面。 ...

    Redis实践与总结

    ### Redis实践与总结 #### 一、Redis简介与应用场景 Redis是一种开源的内存中的数据结构存储系统,可以作为数据库、缓存以及消息中间件使用。它支持多种数据结构,如字符串(strings)、散列(hashes)、列表...

    Redis从入门到精通(深入剖析)【55集完整资料】44-redis-redis事务小结.avi

    Redis从入门到精通高清,迅雷播放器组件可顺利播放

    redis集群搭建小结

    Redis 集群搭建是一个关键的IT操作,它涉及到分布式数据存储、高可用性和扩展性。Redis 是一个高性能的键值存储系统,广泛应用于缓存、消息队列、计数等多个场景。在集群模式下,Redis 可以通过将数据分散在多个节点...

    微服务SpringBoot整合Redis基于Redis的Stream消息队列实现异步秒杀下单

    六、程序测试与小结 文章可能涵盖了编写测试用例以验证Redis Stream消息队列在秒杀场景下的正确性和性能。测试应包括模拟大量并发请求,检查订单创建的正确性,以及验证在高负载下系统的稳定性和伸缩性。 总结,...

    Linux环境安装redis

    小结 通过以上步骤,我们已经成功地安装和配置了 Redis 服务器。在 Linux 环境中安装 Redis 是一个相对简单的过程,只需要下载安装包、拷贝到适当的目录、解压缩、编译安装、配置和启动 Redis 服务器。

    深入理解redis_memcached失效原理(小结)

    Redis 和 Memcached 都是广泛使用的内存数据存储系统,它们常用于缓存和快速数据访问。本文主要讨论了这两种技术的缓存失效原理,特别是针对 Redis 的失效机制进行了深入解析。 首先,我们要明白如何触发 key 的...

    redis常用命令小结

    1、redis-benchmark redis基准信息,redis服务器性能检测 redis-benchmark -h localhost -p 6379 -c 100 -n 100000 100个并发连接,100000个请求,检测host为localhost 端口为6379的redis服务器性能 [root@...

    Redis从入门到精通视频.rar

    44-redis-redis事务小结.avi 45-redis-redis消息的发布与订阅.avi 46-redis-redis的主从复制-提供三台redis服务.avi 47-redis-redis的主从复制-启动三台redis服务.avi 48-redis-redis的主从复制-设置主从关系、全量...

    day68Redis高级day68Redis高级

    1.1.3. 小结 RDB方式bgsave的基本流程是: * fork主进程得到一个子进程,共享内存空间 * 子进程读取内存数据并写入新的RDB文件 * 用新RDB文件替换旧的RDB文件 RDB会在什么时候执行?save 60 1000代表什么含义?...

    Redis Sentinel实现哨兵模式搭建小结

    Redis哨兵模式,用现在流行的话可以说就是一个“哨兵机器人”,给“哨兵机器人”进行相应的配置之后,这个”机器人”可以7*24小时工作,它能能够自动帮助你做一些事情,如监控,提醒,自动处理故障等。 Redis-...

    Redis架构下的MySQL数据库性能提升浅析.pdf

    小结 Redis 架构下的 MySQL 数据库性能提升浅析,Redis 的三种理解和 Redis 中的数据结构选择对于 MySQL 数据库性能提升都起着至关重要的作用。通过合理地选择和使用 Redis,能够提高 MySQL 数据库的性能,满足...

    小结plus、Redis的配置,基础包

    知识点: 1. Mybatis框架概述:Mybatis是一个半自动化的ORM框架,即对象关系映射框架,它的主要作用是实现Java对象与数据库表的映射。Mybatis让开发者以面向对象的方式操作数据库,但又不完全屏蔽SQL语句,保留了...

    redis设计与实现原理及运作机制

    **小结** 简单动态字符串(SDS)是Redis中一种重要的基础数据结构,它在保证字符串操作高效的同时,也为Redis提供了灵活的内存管理机制。 ##### 1.2 双端链表 (Doubly Linked List) **双端链表的应用** 双端链表在...

    redis简单介绍及安装使用小结

    Redis是一种高性能的键值对数据存储系统,常被用作数据库、缓存和消息中间件。它与Memcached相似,都是基于内存的数据存储,但Redis提供了更多丰富的数据类型,包括字符串(string)、哈希(hash)、列表(list)、集合...

Global site tag (gtag.js) - Google Analytics