pipe

echo -e "aaa\nbbb" 使用-e,echo就认为\n后是另一条命令

nc localhost 6379 使用nc打开socket连接
echo -e "set k2 99\nincr k2\nget k2" | nc localhost 6379 通过管道发生命令到6379端口,即redis。

help @pubsub

PUBLISH k1 message1
SUBSCRIBE k1 只能收到subscribe以后才publish的数据

实现聊天室功能:

  • 读取(看对话)
    • 对于live对话,使用pub/sub完成对话更新。
    • 对于历史纪录(3天),可以加入一个新redis(redis02)并使用sorted_set功能,完成过去3天的历史记录。
    • 对于更长的历史纪录,则是走db
  • 写(发对话)
    • service1订阅,然后更新redis02的sorted_set
    • service2订阅,然后把消息放进mq(rabbitmq/kafka),另一端dbservice更新db。

help @transaction

  • watch: 在multi之前执行,如果事务中发现watch的对象改变了,那么事务就中断
  • multi: 事务开始
  • exec: 事务执行
  • 如果多个事务交错进入redis,那么先看到exec的事务会先执行。

redis 中文网站
redis 英文网站,多了一个modules,https://redis.io/modules
可以添加bloom模块。

redis bloom

redis-server --loadmodule path/redisbloom.so
bf.add
bf.exists

对于redis bloom缓存穿透的数据,可以在redis内再加一条记录,这样下次看到redis有cache,就不会再穿透。