为什么要使用Redis

缓存Redis基本是现在软件开发的必备条件:

1、从业务上说可以加快数据的显示提高用户体验。

2、从架构上讲可以存储临时数据及给数据库分压提高系统的吞吐量。

所以目前的软件开发中,几乎都会涉及到Redis的使用。

使用分布式缓存Redis如何加速应用访问

Redis的应用数据加速访问场景非常广泛。虽然Redis是一个key-value的内存数据库,但在实际场景中,Redis经常被作为缓存来使用,如面对数据高并发的读写、海量数据的读写等。 

举个例子,A网站首页一天有100万人访问,其中有一个“积分商城”的板块,要直接从数据库查询,那么一天就要多消耗100万次数据库请求。如果将这些数据储存到Redis(内存)中,要用的时候,直接从内存调取,不仅可以大大节省系统直接读取磁盘来获得数据的IO开销,提高服务器的资源利用率,还能极大地提升速度。 

随着日益增长的用户量以及业务高峰期剧增的访问量,通过扩容一次资源就能够解决问题的方式已不再有显著成效,并且运维Redis也比之前更易出现差错。

而华为云分布式缓存Redis就很好地解决了自建Redis的一些问题,应用场景也十分丰富。比如很多大型电商网站、视频网站和游戏应用等,存在大规模数据访问,对数据查询效率要求高。

使用华为云分布式缓存Redis服务可实现页面缓存、应用缓存、状态缓存、事件并行处理,能够有效减少数据库磁盘IO,提高数据查询效率,减轻管理维护工作量,降低数据库存储成本。

对传统磁盘数据库是一个重要的补充,成为了互联网应用,尤其是支持高并发访问的互联网应用必不可少的基础服务之一。

Redis使用规范建议

1、使用频率高且变动频率低的数据建议使用Redis,这点很重要,也是基本是判断标准

2、给RMDB数据库减压使用,这也是经常使用的场景

2、使用过程中,建议以业务为维度进行Redis中的db数据库的使用规划,缓存数据清晰的同时也给后期维护带来方便,比如因业务需要清空某一业务的缓存数据时,哪我们只需要清空该模块对应的db清空即可,并不影响其它缓存库,下面使用规范供参考

业务模块名称
数据库编号
备注

模块A

db 0

模块B

db 1

模块C

db 2

模块*

db *

*

分布式缓存Redis常见问题

分布式缓存Redis常见问题

  • Redis集群实例是否支持原生集群?

    当前DCS Redis 3.0版本支持Proxy集群,Redis 4.0和5.0版本支持原生集群、Proxy集群。


  • Redis默认的数据逐出策略是什么?

    逐出指将数据从缓存中删除,以腾出更多的存储空间容纳新的缓存数据,详情请参见官网逐出策略。当前版本支持在配置运行参数中修改逐出策略。

    Redis实例支持通过修改配置参数(maxmemory-policy),修改数据逐出策略。

    在达到内存上限(maxmemory)时,Redis支持选择以下8种数据逐出策略:

    noeviction:在这种策略下,如果缓存达到了配置的上限,实例将不再处理客户端任何增加缓存数据的请求,比如写命令,实例直接返回错误给客户端。缓存达到上限后,实例只处理删除和少数几个例外请求。

    allkeys-lru:根据LRU(Least recently used,最近最少使用)算法尝试回收最少使用的键,使得新添加的数据有空间存放。

    volatile-lru:根据LRU(Least recently used,最近最少使用)算法尝试回收最少使用的键,但仅限于在过期集合的键,使得新添加的数据有空间存放。

    allkeys-random:回收随机的键使得新添加的数据有空间存放。

    volatile-random:回收随机的键使得新添加的数据有空间存放,但仅限于在过期集合的键。

    volatile-ttl:回收在过期集合的键,并且优先回收存活时间(TTL)较短的键,使得新添加的数据有空间存放。

    allkeys-lfu:从所有键中驱逐最不常用的键。

    volatile-lfu:从具有“expire”字段集的所有键中驱逐最不常用的键。

    说明:当没有键满足回收前提条件时,数据逐出策略volatile-lru、volatile-random、volatile-ttl与noeviction策略相同,具体见上文noeviction介绍。

    2020年7月之前创建的Redis实例,逐出策略默认为noeviction。2020年7月及之后创建的实例,逐出策略默认为volatile-lru。


  • Redis的安全加固方面有哪些建议?

    在众多开源缓存技术中,Redis无疑是目前功能最为强大,应用最多的缓存技术之一,但是原生Redis版本在安全方面非常薄弱,很多地方不满足安全要求,如果暴露在公网上,极易受到恶意攻击,导致数据泄露和丢失。

    针对DCS的Redis实例,您在使用过程中,可参考如下建议:

    网络连接配置

    1、敏感数据加密后存储在Redis实例,且实例不开启公网访问。

    对于敏感数据,尽量加密后存储。如无特殊需要,尽量不开启公网访问。

    2、对安全组设置有限、必须的允许访问规则。

    安全组与VPC均是用于网络安全访问控制的配置,以端口最少放开原则配置安全组规则,降低网络入侵风险。

    3、客户端应用所在ECS设置防火墙。客户端应用所在的服务器建议配置防火墙过滤规则。

    4、设置实例访问密码。

    5、配置实例白名单。

    Redis-cli使用

    1、隐藏密码

    安全问题:通过在redis-cli指定-a参数,密码会被ps出来,属于敏感信息。

    解决方案:修改Redis源码,在main方法进入后,立即隐藏掉密码,避免被ps出来。

    2、禁用脚本通过sudo方式执行

    安全问题: redis-cli访问参数带密码敏感信息,会被ps出来,也容易被系统记录操作日志。

    解决方案:改为通过API方式(Python可以使用redis-py)来安全访问,禁止通过sudo方式切换到dbuser帐号使用redis-cli。


  • 实例是否支持自定义或修改端口?

    如果是Redis 3.0实例和Memcached实例,访问端口固定为以下端口,不支持指定端口,也不支持修改;如果是Redis 4.0/5.0/6.0实例,支持自定义端口,同时也支持修改端口。