当前位置:首页 > CN2资讯 > 正文内容

redis缓存服务redis清除缓存

1天前CN2资讯

一.问题背景 为了HTTPS抛弃了钉子户国内虚拟主机,趁机用Node重写了之前的PHP服务,放到好贵的VPS上,搬出去后发现抓取国内RSS经常超时,不超时的情况也需要loading 20s的样子,完全不可用。搬意已决,那就想办法提速

之前方案是请求时现抓,拿回来解析完毕后响应请求,过程看起来很慢,但实际很快,一般loading不超过3s,自用可以接受,所以只做了客户端内存缓存和离线缓存

现在20s完全无法忍受,所以先上见效最快的内存缓存:

定时抓取,预先存入redis

redis内存缓存,简单过期策略

每2小时去全部抓取一遍,存入redis,请求先过缓存检查,缓存里有就不现抓,除非服务刚刚重启过,才需要现抓。定时抓取时不影响正常响应,因为抓取场景可以不用考虑脏数据问题,新一点旧一点没太大关系(但极端情况数据是定时抓取间隔 + 客户端缓存过期时间之前的,这时数据就很旧了)

二.安装配置redis 安装 CentOS环境,编译安装redis stable:

# 下载 wget http://download.redis.io/releases/redis-stable.tar.gz # 解压 tar -axvf redis-stable.tar.gz cd redis-stable # 编译安装 make make test make install

默认安装路径在/usr/local/bin:

$ ls /usr/local/bin | grep 'redis' redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server

配置 默认配置文件在安装包的根目录redis.conf:

mkdir -p /etc/redis/ cp redis.conf etc/redis # 修改配置项 vi etc/redis/redis.conf # 后台运行,默认不后台 # 把GENERAL节的daemonize no改为daemonize yes # 改密码,默认免密登录 # 把SECURITY节的requirepass去掉注释,改为requirepass <mypassword>

其它配置项端口号,日志目录等等无所谓,需要的话修改,然后启动验证:

# 启动服务 redis-server /etc/redis/redis.conf # 客户端连接 redis-cli auth <mypassword> # 操作 set 'key' 'value' get 'key'

P.S.redis的更多命令,请查看Command reference – Redis,或者在线试玩Try Redis

添加到系统服务 redis-server /etc/redis/redis.conf每次这样启动看着比较难受,添加到系统服务里就可以通过service redis <cmd>管理了:

# 拷贝启动脚本 cp util/redis_init_script /etc/init.d/ # 改名 mv /etc/init.d/redis_init_script /etc/init.d/redis

然后修改配置项:

vi /etc/init.d/redis # 修改第二行的chkconfig xxx为chkconfig 2345 80 90 # 确认端口号正确REDISPORT=6379 # 确认server可执行文件路径正确EXEC=/usr/local/bin/redis-server # 确认cli路径正确CLIEXEC=/usr/local/bin/redis-cli # 确认redis.conf路径正确CONF="/etc/redis/${REDISPORT}.conf" # start改为后台执行 # 把$EXEC $CONF改为$EXEC $CONF &

P.S.# chkconfig 2345 80 90中,2345是指运行级别,80 90分别表示启动/关机优先级,数值越小越优先,控制顺序,更多信息请查看chkconfig

默认读取/etc/redis/${REDISPORT}.conf,也就是/etc/redis/6379.conf,以应对多实例情况,所以我们给配置文件改名:

mv /etc/redis/redis.conf /etc/redis/6379.conf 最后注册系统服务:

# 注册 chkconfig --add redis # 设置自启动 chkconfig redis on

可以通过service命令管理了:

service redis start

三.node接redis 有现成的第三方模块node_redis:

npm install redis --save

尝试连接:

const redis = require('redis'); const PORT = 6379; const HOST = '127.0.0.1'; const PWD = 'mypassword'; const OPTS = {auth_pass: PWD}; // connect redis let client = redis.createClient(PORT, HOST, OPTS); client .on('error', (err) => { console.log('Error ' + err); }) .on('ready', () => console.log('redis connected'));

connect之后就可以随便操作了,API与redis命令一致:

// 写 client.set(key, val, callback); // 读 client.get(key, (error, val) => {}); // 设置有效期 client.expire(key, seconds); // 检查过期 client.expire(url, (error, ttl) => { if (ttl > 0) console.log('alive'); else console.log('died'); });

特别注意:所有callback都是Node经典方式,第一个参数是err,而不是data

做一个简单的缓存层,结构如下:

cache - queue - clearQueue() - expire() - ttl() + set() + get() + checkFresh()

配合访问抓取和定时抓取:

fetch - onerror(error) => { emitter.emit('error', error); }; - onsuccess(data) => { data && cache.set(url, data); }; - fetchNow() + fetch() => { if (noCache) { cache.checkFresh(url, (fresh) => { if (!fresh) console.log('schedule force fetch now'), fetchNow(); else oncancel('cache is still fresh now'); } } else { cache.get(url, (data) => { if (data) console.log('fetch from cache'), onsuccess(data); else fetchNow(); }); } }

访问抓取走缓存,直接从缓存去,没有才抓。定时抓取强制不走缓存,但检查过期,如果数据还很新,就取消抓取任务,不新的话现抓,抓取成功就过缓存层记录下来

P.S.定时抓取检查过期是为了避免不必要的重复抓取,比如服务挂了重启了,redis的数据不受影响,仍然是新的,这时没必要再抓一遍

四.总结 提速效果很明显,之前访问国内资源20s的loading缩短到5-6s了,国外资源也快了1-2s的样子,比起之前的PHP服务,5-6s还是挺慢,但接下来的优化项就没这么简单粗暴了:

todo 1.接口拆分,有接口返回128K文本,考虑分页 2.redis数据结构优化,目前是url key对应一个很大的JSON字符串,应该有更科学的方式 3.长连接,降低路途成本

    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/19984.html

    分享给朋友:

    “redis缓存服务redis清除缓存” 的相关文章

    电路cn2是什么意思?深度解析电路cn2的技术与应用

    电路cn2是什么意思?基础概念与技术优势在当今的电子工程领域,电路cn2是一个备受关注的技术术语,但很多人对其含义和应用并不清楚。电路cn2到底是什么意思呢?简单来说,电路cn2是一种基于最新电子技术的电路设计方法,旨在提高电子设备的性能、稳定性和能效。它通过优化电路结构和信号处理方式,为现代电子产...

    ColoCrossing数据机房评测:高性能VPS和安全保障让业务更高效

    ColoCrossing是一家在美国市场上已有多年历史的数据机房提供商。我在了解这家公司时,深深被它在数据托管领域的地位所吸引。实际上,ColoCrossing提供的服务不止是简单的服务器租用,他们一手打造了多个高质量的数据中心,涵盖了VPS及服务器托管等业务。随着最近他们在爱尔兰都柏林新增了机房,...

    inet.ws纽约:高性能VPS服务与折扣优惠码解析

    inet.ws是一家新兴的互联网服务提供商,成立于2020年。尽管公司年轻,但它凭借创新的VPS服务迅速在市场上占据了一席之地。最让人称道的是,inet.ws致力于为用户提供稳定和高效的云服务器体验,尤其是在他们的纽约数据中心,这里被认为是其最重要的运营点之一。 在发展的过程中,inet.ws不断完...

    CloudCone 优惠活动详解:2023年最具性价比的云服务选择

    CloudCone 优惠概述 对于许多寻求高性价比云服务的用户来说,CloudCone 是一个值得关注的选项。公司成立于2017年,总部位于美国洛杉矶的MultaCom机房,专注于提供 VPS 主机、云服务器和独立服务器等服务。其主打产品是基于 KVM 架构的 VPS 主机,配备自研的管理面板,能为...

    如何获取便宜稳定算力以推动科研与技术创新

    便宜稳定算力是一个现代计算资源获取的概念,特别是在人工智能、深度学习及科学计算等领域中,这种计算能力的经济性与可靠性显得尤为重要。它的定义可以简单理解为以相对较低的成本获得高效、稳定的计算资源。随着科技的迅速发展,企业和研究机构对计算资源的需求逐渐增加,如何以合理的投资实现算力购买成为一个值得关注的...

    IP检测服务:简化网络体验与保护用户隐私

    IP检测服务是当今网络环境中不可或缺的一部分。简单来说,它帮助用户或开发者迅速获取他们的设备公网IP地址,同时提供各种网络信息。这项服务以其高效、便捷和免费的特点,吸引了众多用户和企业进行使用。 想获取公网IP地址往往需要复杂的步骤,而IP检测服务的出现使这个过程变得轻松。它支持多种返回格式,包括纯...