一、Redis 简介
无论是什么类型的应用,都少不了和数据打交道。尤其是一些复杂的应用场景,都少不了一个高效可靠的数据库。例如日常开发中最常见的 MySQL 等关系型数据库,让数据的存储、检索轻松简单起来,甚至可以轻松地处理百万量级的数据。 而从广义上讲,数据库可以分为二大类,分别是关系型数据库与非关系型数据库,上一期我们讲过的 SQLite 即为关系型数据库,而本文的 Redis 则是非关系型数据库,是一个以 BSD 协议发行的、开源免费的,并具备极高性能的键值数据库。同时 Redis 也是业务应用中最为常见的“缓存”数据库。 为了方便应用开发, EdgerOS 同样引入了 Redis 的客户端模块,满足不同业务场景下对数据处理的需求,开发者可以使用改客户端方便地连接并使用 Redis 服务器。
二、引入模块
EdgerOS 将 Redis 的客户端封装在了 redis 模块中,在开发中要使用时需要先引入该模块:
const redis = require ( 'redis ') ;
三、创建客户端
使用 createClient 方法来创建 Redis 客户端,调用此方法会返回一个 RedisClient 的对象; redis.createClient([options]) returns: {Redis} 返回一个 RedisClient 的对象 示例如下:
const redis = require ( 'redis ') ;
const client = redis. createClient ( { host: '10 . 4.0 . 180 ', port: 6379 , detect_buffers: true
} ) ;
const client = redis. createClient ( { host: '10 . 4.0 . 180 ', port: 6379 , retry_strategy: function ( options) { if ( options. error && options. error. code == = 'ECONNREFUSED ') { return new Error ( 'The server refused the connection') ; } if ( options. total_retry_time > 1000 * 60 * 60 ) { return new Error ( 'Retry time exhausted') ; } if ( options. attempt > 10 ) { return undefined; } return Math . min ( options. attempt * 100 , 3000 ) ; } , } ) ;
相关选项说明: detect_buffers:回复是否使用 Buffer 选项 retry_strategy:将选项对象作为参数的一种函数
四、保存与读取数据
使用 hmset 方法来保存数据, 允许存储多组数据: client.hmset(hash, key1, val1, …keyN, valN[, callback]) val {String | Buffer | Number | Date} 字段的值 使用 hgetall 方法来读取数据: client.hgetall(hash[, callback]) 示例如下:
const redis = require ( 'redis ') ;
const client = redis. createClient ( { host: '10 . 4.0 . 180 ', port: 6379 } ) ; client. hmset ( 'key ', 'foo ', 'bar ', 'hello ', 'world ') ; client. hgetall ( 'key ', function ( err, value) { console. log ( value. foo) ; console. log ( value. hello) ;
} ) ;
五、订阅与发布
使用 publish 方法进行客户端消息发布: client.publish(channel, message) message {String | Number | Buffer | Date} 发布的消息 使用 subscribe 方法对服务端的消息进行订阅: client.subscribe(channel) 示例如下:
const redis = require ( 'redis ') ; const subscriber = redis. createClient ( { host: '10 . 4.0 . 180 ', port: 6379 } ) ;
const publisher = redis. createClient ( { host: '10 . 4.0 . 180 ', port: 6379 } ) ; let messageCount = 0 ; subscriber. on ( 'subscribe ', function ( channel, count) { publisher. publish ( 'a channel', 'a message') ; publisher. publish ( 'a channel', 'another message') ;
} ) ; subscriber. on ( 'message ', function ( channel, message) { messageCount += 1 ; console. log ( "Subscriber received message in channel '" + channel + "': " + message) ; if ( messageCount == = 2 ) { subscriber. unsubscribe ( ) ; subscriber. quit ( ) ; publisher. quit ( ) ; }
} ) ; subscriber. subscribe ( 'a channel') ;
至此,Redis 客户端的主要功能与实现相信大家都有一个初步的认识,由于篇幅所限,不能完整详细的阐述 Redis Client 模块的所有功能,有兴趣的同学可以从我们 EdgerOS 官网获取完整信息。而我们EdgerOS 除了提供 Redis 客户端以外, 还有像非关系型数据库中的 Mysql 客户端等, 都可在官网中获取相关信息,希望本文可以对您的应用开发有所裨益。