跳至主要內容

认识NoSQL和Redis

张威大约 7 分钟redisredis基础

认识NoSQL和Redis

一、NoSQL

NoSQL:Not-Only SQL,泛指非关系型数据库,作为关系型数据库的补充,非关系型数据库一般不会用,font>

NoSQL特征:可扩容、可伸缩、大数据量下高性能、灵活的数据类型、高可用

NoSQL的分类

NoSQL数据库主要有以下四类。这些类别中的每一个都有其独特的属性和局限性。没有特定的数据库可以更好地解决所有问题。

  • 基于键值对 key-value类型:Redis,memcached

  • 列存储数据库 Column-oriented Graph:HBase

  • 图形数据库 Graphs based:Neo4j

  • 文档型数据库: MongoDB

    • MongoDB是一个基于分布式文件存储的数据库,主要用来处理大量的文档

Memcache

  • 很早出现的 NoSql 数据库
  • 数据都存储在内存中,
  • 支持简单的 key-value 模式,支持
  • 一般是作为缓存数据库辅助持久化的数据库(一般和MySQL等关系型数据库一起使用)

Redis

  • 几乎覆盖了 Memcached 的绝大部分功能
  • 数据都在内存中,支持持久化(数据可以存储到硬盘),主要用作备份恢复
  • 除了支持简单的 key-value 模式,还支持多种数据结构 的存储,比如 list、set、hash、zset
  • 一般是作为缓存数据库辅助持久化的数据库(一般和MySQL等关系型数据库一起使用)

MongoDB

  • 高性能、开源、模式自由(schema free)的文档型数据库 (存储结构和json类似,里面存储的数据形式多样,结构更加复杂)
  • 数据都在内存中, 如果内存不足,把不常用的数据保存到硬盘 虽然是 key-value 模 式 , 但 是 对 value ( 尤 其 是 json)提供了丰富的查询功能
  • 支持二进制数据及大型对象
  • 可以根据数据的特点替代 RDBMS ,成为独立的数据库。或者配合 RDBMS,存储特定的数据。

集群数据库服务器通常以如下形式对外提供数据服务

基本信息存放在MySQL数据库,文本类信息存放在MongoDB,图片信息存放在FastDFS,搜索关键字存放在Slor,热点信息存放在Redis,这些数据库服务器一起对外提供服务

二、Redis (mote ctionary ervice,远程字典服务器)

redis简介

Redis 是一个开源(BSD许可)的,C语言编写的,高性能的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它基于内存运行并支持持久化的高性能键值对(key-value)数据库

相关网站:

redis中文官网:http://www.redis.cn/

redis英文官网:https://redis.io/

特征:

  • 数据间没有必然的关联关系:由于MySQL数据间的关联性太强,导致数据读取缓慢,NoSQL数据库要做的就是断开数据的关联关系
  • 内部采用单线程机制进行工作:单线程模型,原子性比较强,可以保证数据安全,采用IO多路复用的方式也能保证高性能
    • Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  • 高性能:官方提供测试数据,50个并发执行10w个请求,读的速度是11w次/s,写的速度是8.1w次/s。
  • 多数据类型支持:string(字符串类型)、list(列表类型)、hash(散列类型)、set(集合类型)、sorted_set(有序集合类型)
  • 持久化支持(非Redis主要功能):可以进行数据灾难恢复,避免突发情况导致数据丢失
  • 丰富的特性: Redis还支持publish/subscribe, 通知, key过期等等特性。

Redis的特性

1、支持持久化。redis是内存数据库,数据是存在内存中,断电重启之后,数据会丢失,持久化可以将数据被备份到磁盘上面,断电重启之后,可以将数据加载到内存中。

2、支持丰富的数据类型。支持:string、list、set、sort set、hash

3、支持数据的备份,也就是支持主从复制。

Redis优点

1、性能高。读11w/s,写8.1w/s

2、丰富的数据类型,支持:string、list、set、sort set、hash

3、原子

4、丰富的特性,支持发布订阅,key过期。

Redis的应用

  • 为热点数据加速查询(主要场景),如热点商品、热点新闻、热点资讯、推广类等高访问量信息等
  • 任务队列,如秒杀、抢购、购票排队等
  • 即时信息查询,如各位排行榜、各类网站访问统计、公交到站信息、在线人数信息(聊天室、网站)、设备信号等
  • 时效性信息控制,如验证码控制、QQ群投票控制等
  • 分布式数据共享,如分布式集群架构中的 session 分离
  • 消息队列
  • 分布式锁

redis为什么是单线程及为什么快的总结

  1. Redis是纯内存数据库,所以读取速度快。
  2. Redis使用的是非阻塞IO、IO多路复用,使用了单线程来轮询描述符将数据库的开、关、读、写都转换成了事件,减少了线程切换时上下文的切换和竞争
  3. Redis采用了单线程的模型,保证了每个操作的原子性,也减少了线程的上下文切换和竞争
  4. Redis避免了多线程的锁的消耗
  5. Redis采用自己实现的事件分离器,效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大。

windows版Redis程序说明

Redis基本命令

命令行模式工具使用:功能性命令、清除屏幕信息、帮助信息查阅、退出指令

信息添加

set key value

信息查询:根据key查询对应的value,如果不存在,返回空(null)

get key

删除数据

del key

清除屏幕信息

clear

帮助命令:获取命令帮助文档,获取组中所有命令信息名称

help 命令名称

退出客户端

quit
exit
#单进程模型来处理客户端的请求,对读写等事件的响应通过对epoll的包装来做到。
#默认16个数据库,编号0-15,切换数据库
select + num
#把key从当前库移动到目标库
move key [num]  

#查看当前数据库的key的数量
dbs
#清空当前数据库,
flushdb
#清空所有数据库
flushall
#查看key值,问号表示占位符
keys *,keys k? 
#判断key是否存在
exists key 
#查看key的剩余有效时间,-1表示永不过期,-2表示已过期
ttl key  
#为给定的key设置过期的时间
expire key seconds 
#查看key的类型
type key 
#删除key 
del key