redis概述


Redis

一、概述

Redis是用C语言开发的一个开源的高性能基于内存运行的键值对NoSQL数据库

Redis(Remote Dictionary Server 远程字段服务)是一个开源的使用ANSI C语言编写、支持网络、科技与内存亦可持久化的日志型、key-value数据库,并提供多种语言的API。

(1) 支持数据的持久化,可以将数据保存在磁盘中,重启之后可以再次加载到内存中使用
(2) 支持多种数据类型,除了KV类型的数据,还支持list、set、hash等数据结构
(3) 支持master-slave模式的数据备份

二、Redis应用场景

  1. 热点数据加速查询(主要场景),如热点商品、热点信息等访问量较高的数据
  2. 即时信息查询,如公交到站信息、在线人数信息等
  3. 时效性信息控制,如验证码控制、投票控制等
  4. 分布式数据共享,如分布式集群架构中的session分离消息队列

1.NoSQL技术

为了克服上述问题,java web项目通常会引入NoSQL技术,这是一种基于内存的数据库,并且提供一定的持久化功能。

Redis和MongoDB是当前使用最广泛的NoSQL, 而就Redis技术而言,它的性能十分优越,可以支持每秒十几万的读写操作,其性能远超数据库,并且还支持集群、。分布式、主从同步等配置,原则上可以无限扩展,让更多的数据存储在内存中,更让人欣慰的是它还支持一定的事务能力,这保证了高并发的场景下数据的安全和一致性。

2.高并发和快速原因

Redis是基于内存的,内存的读写速度非常快;
Redis是单线程的,省去了很多上下文切换线程的时间;
Redis使用多路复用技术,可以处理并发的连接。非IO内部实现采用epoll,采用了epoll自己实现的简单的事件框架。epoll的读写、关闭、连接都转化为事件,然后利用epoll的多路复用特性,绝不在IO上浪费一点时间。

3.单线程的优劣势

1、优势

代码更清晰,处理逻辑更简单

不用考虑各种锁的问题,不存在加锁和释放锁的操作,没有因为可能出现死锁而导致的性能消耗

不存在多线程切换而消耗CPU

2、劣势

无法发挥多核CPU性能优势,不过可以通过单击开多个Redis实例来完善。

4.Redis高并发总结

1、Redis是纯内存数据库,一般都是简单存取操作,线程占用的时间很多,时间的花费主要集中在IO上,所以读取速度快;

2、Redis使用的是非阻塞IO,IO多路复用,使用了单线程来轮询描述符,将数据库的开、关、读、写都转换成事件,减少了线程切换时上下文切换和竞争。

3、Redis采用了单线程的模型,保证了每个操作的原子性,也减少了线程的上下文切换和竞争。

4、Redis全程使用hash结构,读取速度快,还有一些特殊的数据结构,对数据存储进行了优化,如压缩表,对短数据进行压缩存储,再如跳表,使用有序的数据结构加快读写的速度。

5、Redis采用自己实现的事件分离器,效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大。

三、Redis基础知识

Redis采用单线程机制进行工作

Redis默认拥有16个数据库,数据库编号从0开始,默认使用0号数据库

使用select 数据库编号 可以切换使用的数据库

dbsize 命令查看当前数据库key的数量

keys * 命令查看当前数据库所有的key

flushdb 命令清空当前数据库

flushall 命令清空所有数据库

Redis中所有数据库使用同一个密码,默认没有密码,Redis认为安全层面应该由Linux来保证

Redis中所有索引都是从0开始

Redis默认端口是6379


文章作者: liming
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 liming !
评论
  目录