redis
pipeline
-
传统 request/response 协议
- Client 向 server 发送查询,阻塞等待 server 的 response
- server 处理查询,返回结果
-
pipeline
-
是什么
即使 client 没有收到 response,依旧可以发送 request,最后才处理旧的 response
-
注意
当 client 使用 pipeline 向 server 发送请求时,server 需要使用一定的内存,按顺序存储相应的 response,所以如果需要使用流水线发送大量命令,则最好以具有合理数量的批处理形式发送它们,例如 10k 命令,阅读答复,然后再次发送 10k 命令,依此类推
-
优点
- 减少 RTT 时间
- 提高在给定的Redis服务器中每秒可执行的总操作量:socket I/O 花费极大,系统倒影读写操作,从用户域到内核域,包括上下文切换也是
- 处理速度提高近 10 倍
-
-
scripting lua
-
减少网络开销。可以将多个请求通过脚本的形式一次发送,减少网络时延
-
原子操作。redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。因此在编写脚本的过程中无需担心会出现竞态条件,无需使用事务。
-
复用。客户端发送的脚步会永久存在redis中,这样,其他客户端可以复用这一脚本而不需要使用代码完成相同的逻辑。
-
eval 用来直接执行 lua 脚本: EVAL script numkeys key [key ...] arg [arg ...] > eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second 1) "key1" 2) "key2" 3) "first" 4) "second"
-
redis 配置
Redis可以在不使用内置默认配置的配置文件的情况下启动,但是建议仅将此设置用于测试和开发目的。
配置Redis的正确方法是提供一个Redis配置文件,通常称为redis.conf
。
指令格式:keyword argument1 argument2 ... argumentN
-
命令行传递参数
./redis-server --port 6380 --slaveof 127.0.0.1 6379
- 命令行传递的参数的格式与
redis.conf
文件中使用的参数的格式完全相同,但关键字的前缀为--
。 - 这会在内部生成一个内存中的临时配置文件(可能会连接用户传递的配置文件(如果有)),其中参数被转换为
redis.conf
格式。
-
服务器运行时传递参数
config set
config get
可以在不停止和重启服务的情况下设置和查询配置信息- 运行时的配置修改不会影响
redis.conf
文件内容,下次启动服务仍然使用旧的配置信息 config rewrite
可以更新redis.conf
内容,未涉及的配置内容和注释部分不会更改
-
将 redis 配置为缓存
-
将 redis 设置为缓存,那么每个 key 都会有一个过期限制,就不用单独设置 expire time 了
-
例如如下设置,当超过 2mb 的内存限制,便会过期 maxmemory 2mb maxmemory-policy allkeys-lru
-