redis 学习笔记 02

redis

pipeline

  1. 传统 request/response 协议

    • Client 向 server 发送查询,阻塞等待 server 的 response
    • server 处理查询,返回结果
  2. pipeline

    1. 是什么

      即使 client 没有收到 response,依旧可以发送 request,最后才处理旧的 response

    2. 注意

      当 client 使用 pipeline 向 server 发送请求时,server 需要使用一定的内存,按顺序存储相应的 response,所以如果需要使用流水线发送大量命令,则最好以具有合理数量的批处理形式发送它们,例如 10k 命令,阅读答复,然后再次发送 10k 命令,依此类推

    3. 优点

      • 减少 RTT 时间
      • 提高在给定的Redis服务器中每秒可执行的总操作量:socket I/O 花费极大,系统倒影读写操作,从用户域到内核域,包括上下文切换也是
      • 处理速度提高近 10 倍
  3. 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

  1. 命令行传递参数

    • ./redis-server --port 6380 --slaveof 127.0.0.1 6379
    • 命令行传递的参数的格式与redis.conf 文件中使用的参数的格式完全相同,但关键字的前缀为--
    • 这会在内部生成一个内存中的临时配置文件(可能会连接用户传递的配置文件(如果有)),其中参数被转换为 redis.conf 格式。
  2. 服务器运行时传递参数

    • config set config get 可以在不停止和重启服务的情况下设置和查询配置信息
    • 运行时的配置修改不会影响 redis.conf 文件内容,下次启动服务仍然使用旧的配置信息
    • config rewrite 可以更新 redis.conf 内容,未涉及的配置内容和注释部分不会更改
  3. 将 redis 配置为缓存

    • 将 redis 设置为缓存,那么每个 key 都会有一个过期限制,就不用单独设置 expire time 了

    • 例如如下设置,当超过 2mb 的内存限制,便会过期
      maxmemory 2mb
      maxmemory-policy allkeys-lru

猜你喜欢

转载自www.cnblogs.com/leafs99/p/redis_learning_02.html