redis簡(jiǎn)單介紹
- redis = 內(nèi)存數(shù)據(jù)庫(kù)
- web server 最常用的緩存數(shù)據(jù)庫(kù)梨与,數(shù)據(jù)存放在內(nèi)存中
- 優(yōu)點(diǎn)是速度快
- 缺點(diǎn)是內(nèi)存比較昂貴
- 相比于mysql呻率,訪問速度快(內(nèi)存和硬盤不是一個(gè)數(shù)量級(jí))
- 解決方案redis
- 將web server和radis拆分為兩個(gè)單獨(dú)的服務(wù)
- 雙方都是獨(dú)立的,都是可拓展的(例如都拓展成集群)
- 包括mysql,也是一個(gè)單獨(dú)的服務(wù),也可拓展
redis使用
- nodejs連接redis
- nodejs安裝redis
tyarn add redis
- 引入redis
const redis = require('redis')
- 創(chuàng)建客戶端
redis.createClient
- nodejs創(chuàng)建的redis實(shí)例也可在redis-cli中共同set和get
- 完整實(shí)例set,get
const redis = require('redis') // 創(chuàng)建客戶端 const redisClient = redis.createClient(6379, '127.0.0.1') redisClient.on('error' , err =>{ console.error(err); }) // set redisClient.set('msg', 'zachliu', redis.print) // get redisClient.get('msg', (err, value) => { if (err) { console.error(err); return } console.log(value); redisClient.quit() })
- nodejs安裝redis
- 封裝成工具函數(shù)笋颤,供API使用
- 將配置參數(shù)寫入配置文件中(配置文件根據(jù)項(xiàng)目架構(gòu)自己設(shè)計(jì)公共文件夾)
let REDIS_CONF if (env === 'dev') { // redis REDIS_CONF = { port: '3306', host: '127.0.0.1' } }
- 封裝工具函數(shù)
const redis = require('redis') const { REDIS_CONF } = require('../config/db') // 創(chuàng)建客戶端 const redisClient = redis.createClient(REDIS_CONF.port, REDIS_CONF.host) redisClient.on('error', err => { console.error(err); }) function set(key, val) { // 將對(duì)象轉(zhuǎn)換成字符串 if (typeof val === 'object') { val = JSON.stringify(val) } // set redisClient.set(key, val, redis.print) } function get(key) { // get const promise = new Promise((resolve, reject) => { redisClient.get(key, (err, value) => { if (err) { reject(err) return } // 處理數(shù)據(jù)為null的數(shù)據(jù) if (value == null) { resolve(null) return } // 處理json格式的數(shù)據(jù) try{ resolve(JSON.parse(value)) }catch{ resolve(value) } }) }) return promise } module.exports = { set, get }
- 將配置參數(shù)寫入配置文件中(配置文件根據(jù)項(xiàng)目架構(gòu)自己設(shè)計(jì)公共文件夾)