文章目录[隐藏]
1. 背景
由于本人最近打算使用Typescript来重构一下自己的个人博客,所以就开始折腾了,但是由于之前博客的登录注册是没有配置验证码验证机制的,当然没有配置的主要原因是自己当时太菜了。由于经过了社会的考验,对于自己的技术也有所增长,所以开始折腾一下验证码机制,要做到验证码的时效性,所以我就选择了redis来存储验证码
2. 技术选择
由于本人对于node有所涉及,所以这里选择node来进行redis的服务配置。对于一个合格的前端来说,对于此类的问题肯定是回到npm上寻找有没有相关的包。我这里所选择的是node-redis这个包
3. redis 说明
Redis 是一个高性能的key-value数据库。它提供了Java,C/C++,C#,PHP,nodejs,Perl,Object-C,Python等客户端。
它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
4. 使用
4.1 下载
npm i redis
4.2 基本配置
/*
* @Autor: Clairoll
* @Date: 2021-03-05 10:49:36
* @LastEditTime: 2021-03-16 17:44:27
* @Email: [email protected]
* @description: redis 配置
*/
import redis from 'redis'
import { REDIS } from './config'
import { promisifyAll } from 'bluebird'
// 连接redis
const client = promisifyAll(redis.createClient(REDIS))
// 错误处理
client.on('error', (err) => {
console.log('Redis Client Error:' + err)
})
// 存储值
const setValue = (key, value, time) => {
if (typeof value === 'undefined' || value == null || value === '') {
return
}
if (typeof value === 'string') {
if (typeof time !== 'undefined') {
client.set(key, value, 'EX', time) // time 为过期时间,单位秒
// 实例 setValue(body.uuid, newCaptcha.text, 10 * 60) // 十分钟过期
} else {
client.set(key, value)
}
} else if (typeof value === 'object') {
Object.keys(value).forEach((item) => {
client.hset(key, item, value[item], redis.print)
})
}
}
// 获取值
const getValue = (key) => {
return client.getAsync(key)
}
// 获取值(对象)
const getHValue = (key) => {
return client.hgetallAsync(key)
}
// 删除
const delValue = (key) => {
client.del(key, (err, res) => {
if (res === 1) {
console.log('delete successfully');
} else {
console.log('delete redis key error:' + err)
}
})
}
export {
client,
setValue,
getValue,
getHValue,
delValue
}