Redis set 何时会 Failed ( set 操作失败)

在使用 tornado-redis 库 开发时, set 操作总是返回 True,
除非连接异常, 现在就有一个疑问, 什么时候会返回 False
( Python 代码中).

首先来几个测试实验:
1. 存储其他类型, eg: lpush test_key 1
此时对 test_key 使用 set 操作, set test_key 1
2. 根据实验1步骤逆着来, 看看 push 操作是否成功

实验结果:
1. set操作可以覆盖 list操作

2. list操作无法覆盖set操作

仍然没有找到直接的依据, 那么就看看 stackoverflow 的答案.
当中提到文档里有说明:
” Status code reply: always OK since SET can’t fail. “

接着找 Redis SET 官方文档 阅读.
文档中并没有出现上面提到的话, 而说明的是:

Simple string reply: OK if SET was executed correctly.
Null reply: a Null Bulk Reply is returned if the SET
operation was not performed becase the user specified
the NX or XX option but the condition was not met.

即SET 操作没有执行时的情况下, 返回Null 回复 而在使用
NX 或者 XX 参数操作时:
set test_key 1 nx # 当 test_key 已存在时设置失败
set test_key 1 xx # 当 test_key 之前不存在时设置失败

如果仅仅是 set test_key 1 呢, 这个情况有没有失败的时候?
在上面提到的 stackoverflow 答案中, 提到了 redis.c 源码
maxmemory 选项如果设置, 则会限制 redis 存储的容量. 比如设置
一个极端条件 maxmemory 1 bytes, 假如之前有 redis 存储数据,
那么此时再使用 set 设置新值时, 效果如下图:

Redis set的文档:
Redis SET
Redis SETNX
Redis SETEX


最后提醒自己一下, 学会看文档, 不要猜测 -_-b

Nginx + LuaJIT + Redis 编译配置教程

最近工作上需要本地开发机模拟服务器的环境, 最初的需求考虑是
需要搭建 Nginx + Luajit + Redis 组合的配置, 因为本博客所在主机
中使用的是一样的方式配置, 当时就直接参考自己的操作笔记, 重新
搭建一套在开发机上. 因为这些都是基础的系统配置信息,干脆分享
出来,也希望从读者中收获建议和改善的方案 :)

Continue reading

TCP/IP UDP/IP 传输数据的应用层包大小如何定

本文的写作起因:
本人负责项目中手机底层通信模块开发, 和做游戏的前端同事
沟通网络手游时的网络状况. 听到同事描述各种的网络环境
(咨询的是游戏更新时, 下载更新包的环境):
1. wifi连接情况, 正常的情况, 连接网络质量良好的 wifi
2. wifi连接情况, 两个wifi都可以自动连接的情况下, 手机一会连接 wifi-a, 一会 wifi-b
3. 3G网络连接(壕啊, 一款网络手游上百兆都有可能, 下载速度都可能比 使用运营商家用宽带服务的都快)
4. 2G网络连接(这个情况都有玩家更新 –b )

由以上场景, 当时联想到熟悉的词: MTU(Maximum Transmission Unit, 最大传输单元)
在各种网络环境下, 也包括PC端, 都有一个 MTU 的缩写词, 有时候家用网络优化,
百度搜索都有答案告诉你 修改系统 MTU 的值.

同时在自己的项目里, 对自己有个问题, 一次发多少大小以内的 tcp/udp 数据包合适?

通过查询资料, 做个记录:

Continue reading