【架构师(第四十一篇)】 服务端开发之安装并连接 Redis数据库
2023-02-18 15:36:21 时间
本地安装 Redis
下载
?? 下载地址
进入到下载地址,我下载的是这个
本地安装
我这里解压到 D
盘了,所有的文件就只有这些。
使用 vscode
打开这个文件
找到 requirepass foobared
,复制到新的一行,将前面的 #
删除,并清除空格,不然会造成密码设置不成功。
然后将 foobared
改为自己需要的密码,然后保存,身份不够的以管理员身份打开。
在 redis
所在文件夹打开 cmd
,执行 redis-server.exe redis.windows.conf
,这时界面显示 redis
信息,说明服务正常开启。
为了方便下次启动,在 redis
所在文件夹下新建 startup.bat
文件,内容为 redis-server.exe redis.windows.conf
。
这个窗口不要关闭,继续打开一个 cmd
,执行 redis-cli.exe -h 127.0.0.1 -p 6379 -a xiaowei123
回车
其中 xiaowei123
就是之前设置的密码。
然后使用 set key value
设置缓存,使用 get key
读取缓存,出现以下界面就证明本地安装成功了。
连接 Redis
项目中安装 Redis
这里为了跟着老师学习,指定安装版本,新版本语法不一样会导致错误。
npm i redis@3.0.2 -S
配置 Redis
// src\config\envs\dev.js
module.exports = {
// redis 连接配置
redisConf: {
port: '6379',
host: '127.0.0.1',
password: 'xiaowei123'
},
}
封装设置/获取缓存
// src\cache\index.js
const redisClient = require('../db/redis')
/**
* redis set
* @param {string} key key
* @param {string|Object} val val
* @param {number} timeout 过期时间,单位 s ,默认 1h
*/
function cacheSet(key, val, timeout = 60 * 60) {
let formatVal
if (typeof val === 'object') {
formatVal = JSON.stringify(val)
} else {
formatVal = val
}
redisClient.set(key, formatVal)
redisClient.expire(key, timeout)
}
/**
* redis get
* @param {string} key key
*/
function cacheGet(key) {
const promise = new Promise((resolve, reject) => {
redisClient.get(key, (err, val) => {
if (err) {
reject(err)
return
}
if (val == null) {
resolve(null)
return
}
try {
resolve(JSON.parse(val))
} catch (ex) {
resolve(val)
}
})
})
return promise
}
module.exports = {
cacheSet,
cacheGet,
}
测试连接 Redis 数据库
// src\db\redis.js
const redis = require('redis')
const { redisConf } = require('../config/index')
// 创建客户端
const { port, host, password } = redisConf
const opt = {}
if (password) {
opt.password = password // prd 环境需要密码
}
const redisClient = redis.createClient(port, host, opt)
redisClient.on('error', err => {
console.error('redis connect error', err)
})
// 运行 node src/db/redis.js 进行测试连接
redisClient.on('connect', () => {
console.log('redis connect success')
redisClient.set('foo', 'bar', redis.print) // => "Reply: OK"
redisClient.get('foo', redis.print) // => "Reply: bar"
redisClient.quit()
})
module.exports = redisClient
控制台执行 node src/db/redis.js
,出现 success
说明连接成功了。
进一步测试数据库连接
// src\routes\index.js
const router = require('koa-router')()
const packageInfo = require('../../package.json')
const testMysqlConn = require('../db/mysql2')
const ENV = require('../utils/env')
const { WorkModel } = require('../models/WorksModel')
const { cacheGet, cacheSet } = require('../cache/index')
// 测试数据库连接
router.get('/api/db-check', async (ctx) => {
// 测试 mysql 数据库连接
const mysqlRes = await testMysqlConn()
// 测试 mongodb 数据库连接
let mongodbConn
try {
mongodbConn = true
await WorkModel.findOne()
} catch (error) {
mongodbConn = false
}
// 测试 Redis 连接
cacheSet('name', 'biz editor sever OK - by redis')
const redisTestVal = await cacheGet('name')
ctx.body = {
errno: 0,
data: {
name: 'biz editor server',
version: packageInfo.version,
ENV,
mysqlConn: mysqlRes.length > 0,
mongodbConn,
redisConn: redisTestVal != null,
}
}
})
module.exports = router
访问 http://localhost:3000/api/db-check
,redisConn
的结果为 true
,也进一步证明了 Redis
数据库连接成功了。
相关文章
- 【mysql】 closing inbound before receiving peer's close_notify问题解决
- dataX是阿里开源的离线数据库同步工具的使用
- mysql 分组统计 case when 及 if 语句使用
- MySQL 字符串索引优化方案
- Guns mybatisplus只输出sql不输出结果集 【Guns框架怎么打印sql语句】
- MySQL中tinytext、text、mediumtext和longtext等各个类型详解
- 【已解决】在使用RocketMQ消费消息的时候,提示不支持SQL92的错误:CODE: 1 DESC: The broker does not support consumer to filter
- 有奖问卷|墨天轮2022年数据库大调查现已启动!
- TISMO:建立肿瘤免疫和免疫治疗反应模型的同基因小鼠肿瘤数据库
- 【已解决】ssm 项目打印sql日志的的坑【修改mybatis日志打印】
- 【已解决】spring boot项目从mysql中获取数据候错误The driver has not received any packets from the server
- MySQL 事务介绍及使用方法
- MySQL 中 varchar 和 char 区别
- MySQL 联合查询 union
- MySQL 事务特性和事务隔离级别
- mysql 数据库设计三大范式
- MySQL 慢查询详解
- Reactive Spring实战——响应式MySql交互
- Yii2.0 数据库操作增删改查大全
- 给你推荐一款真的好用的开源数据库监控系统LEPUS