快速认识Redis及在nodejs中使用redis

Nosql与Sql

在面对海量用户和高并发需求的条件下,使用传统的关系型数据库,由于关系型数据库的数据存储在硬盘,性能会比较差,导致网站崩溃。除此之外,关系型数据库可扩展性差,数据库中的表之间是网状关系,错综复杂,对其中一个表的结构进行修改,有可能牵一发动全身。
Nosql的出现解决了Sql的这两个问题,所以Nosql常被用在海量用户和高并发的需求下,对比sql,特点是

  1. 数据主要将数据存储在内存,提高访问速度,但也能做数据灾难恢复,也可以将数据存在硬盘,但这不是nosql的重点。
  2. 采用key-value的方式存储数据,数据之间关联不紧密,具有较高灵活性和可扩展性

sql和nosql在不同的场景下因有不同的选择,以电商为例子。
商品基本信息适合存储在MySQL
商品描述、评论等大段文字,存在硬盘,读写比较慢,适合存储在MongoDB
图片信息这种数据,比较偏向于文件性质,适合存储在分布式文件系统
搜索关键字适合存储在ES、Lucene、solr
对于热点信息,具有高频和阶段性的特点,适合存储在Redis,运用其高性能的特点满足业务需求。

Redis

特点

  1. 数据之间没有必然关联,使用key-value存储
  2. 采用单线程工作,也就是说同步工作,不会出错,操作都是原子性的
  3. 虽然是单线程,但是高性能
  4. 支持五种数据类型
  5. 持久化支持

应用

  1. 热点数据加速查询
  2. 任务队列:秒杀、抢购、排队购票
  3. 即时信息查询:排行榜、聊天室信息、设备信号等
  4. 时效性信息:验证码、投票控制
  5. 消息队列
  6. 分布式数据共享,session分离
  7. 分布式锁

Nodejs中使用Redis

下载安装

下载redis源代码,编译

cd redis-<version>
make # 编译
src/redis-server #启动

打开另一个终端,启动redis交互命令行,通过set和get存取数据

src/redis-cli # 启动交互命令行查询
127.0.0.1:6379> set foo bar
OK
127.0.0.1:6379> get foo 
"bar"

redis-server也可以后台执行

src/redis-server --daemonize yes # 后台执行
pkill -u $USER redis-server # 清空本机后台redis

接入node

npm install redis --save
const redis = require('redis');
const client = redis.createClient();
client.on('connect',()=>{
    console.log('Redis client cennected');
});
client.set('foo','bar',redis.print);
client.get('foo',(err,result)=>{
    if(err){ 
        console.log(err);
        throw error;
    }
    console.log('Get result: ',result);
})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。