Redis 外部访问设置

1、错误原因

Redis搭建好后一般都是使用编程语言进行连接调用,默认Redis的设置是不允许外界访问的,外界telnet请求Redis服务器的时候会有如下提示:

-DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server. 3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. 4) Setup a bind address or an authentication password. NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside.

这说明目前处在保护模式上,查看Redis的注释可以了解,连接Redis只能通过本地(127.0.0.1)来连接,而不能使用网络IP(192.168.1.x)来连接,如果需要请修改配置文件redis.conf

 

2、解决方案

进入Redis目录打开Redis.conf配置文件

 

1>注释掉bind
#bind 127.0.0.1
2>默认不是守护进程方式运行,这里可以修改
daemonize no
3>禁用保护模式
protected-mode no

 

启动Redis并指明配置文件

redis-server ../redis.conf

 

OK,通过外网telnet一下Redis服务器看看是否通了,在编程语言中连接Redis也就可以了

 

3、附录

用一个外部客户端RedisStudio来访问查看Redis的数据

转载于:https://www.cnblogs.com/taiyonghai/p/5826134.html

### 使用 Redis 作为外部缓存的最佳实践和配置方法 #### 配置容量上限 为了有效管理内存资源,需通过 `maxmemory` 参数设置 Redis 的最大可用内存。此参数可以防止 Redis 占用过多系统内存而导致性能下降或其他服务受影响[^1]。 ```bash maxmemory 1gb ``` 当达到指定的最大内存时,Redis 可以采用不同的淘汰策略来释放空间。常见的淘汰策略包括但不限于: - **LRU (Least Recently Used)**:移除最近最少使用的键。 - **LFU (Least Frequently Used)**:移除最不常访问的键。 推荐使用 LRU 或 LFU 策略以确保保留更频繁或最近被请求的数据。 ```bash maxmemory-policy allkeys-lru ``` #### 数据读取逻辑 对于用户的每一次查询操作,应遵循如下流程: 1. 检查目标数据是否存在于 Redis 缓存中; 2. 若存在,则直接返回该数据并减少对后端数据库的压力; 3. 若不存在,则从数据库获取所需数据,并将其同步存储至 Redis 中以便后续更快响应相同请求。 这种机制可使 Redis 自动积累热点数据集,在一定时间范围内形成动态平衡状态。 #### 性能考量 相比 Memcached 而言,尽管两者均具备高效率特性,但由于 Redis 支持更加丰富的数据结构以及提供了更多功能选项(如事务、发布订阅模式等),所以在涉及复杂业务场景的应用程序开发过程中显得尤为适用[^2]。 另外值得注意的是,虽然理论上单线程架构下的 Redis 处理速度较快,但如果面临极高并发量的情况还是建议考虑分片或者集群部署方案进一步提升整体吞吐能力。 #### 持久化与恢复 自 Redis 4.0 版本起引入了 RDB 和 AOF 文件相结合的新方式——即混合持久化技术。这种方式能够在保障启动速度接近传统 RDB 方案的前提下最大限度降低因意外宕机所造成的未保存修改损失风险[^4]。 启用混合持久化的命令如下所示: ```bash save "" appendonly yes aof-use-rdb-preamble yes ``` 以上配置表示禁用了常规周期性快照创建行为 (`save ""`) ,转而依赖于追加仅日志记录配合初始全量备份头信息完成整个过程控制工作流转换。 --- ### 示例代码片段展示如何集成 Redis 到应用程序中的基本框架 假设我们正在构建一个 Python Web 应用程序,下面是一个简单的例子说明怎样利用 redis-py 客户端库实现上述提到的功能需求。 ```python import redis from flask import Flask, jsonify app = Flask(__name__) cache = redis.StrictRedis(host='localhost', port=6379, db=0) @app.route('/data/<key>') def get_data(key): value = cache.get(key) if value is not None: return jsonify({"source": "Cache", "value": value.decode('utf-8')}) # Simulate fetching from database or other source. real_value = fetch_from_database(key) if real_value: cache.setex(key, timedelta(hours=1), value=real_value) # Cache with TTL of 1 hour return jsonify({"source": "Database", "value": real_value}) def fetch_from_database(key): """Simulated function to retrieve data.""" simulated_db_values = {"item1": "Value1", "item2": "Value2"} return simulated_db_values.get(key, None) if __name__ == '__main__': app.run(debug=True) ``` 在此脚本里定义了一个 RESTful API 接口 `/data/:key`, 当接收到 GET 请求时会优先尝试查找对应的缓存条目;如果没有命中则继续向模拟出来的“真实”数据源发起调用来填充缺失部分同时更新本地副本供未来重复利用节省开销。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值