Featured image of post redis应用-缓存

redis应用-缓存

本文阅读量

16、redis缓存

问题

  1. 存储层与缓存层数据不一致问题
  2. 代码的维护加大,运维成本加大

场景

mysql开销大的复杂运算

粒度划分问题

如:一张表中有100个字段,redis怎么去缓存这些数据呢!

如果缓存所有字段,会有如下问题:

  1. 消耗更多的空间
  2. 查询数据,将结果返回时会占用更多的网络消耗
  3. 序列化与反序列化的cpu消耗

如果只缓存热点数据,会有以下问题:

  1. 通用性比较低,如果要有查询的字段没在缓存中,需要重新缓存
  2. 代码维护较为复杂,如上

多级缓存

好处:

  1. 提速
  2. 减少服务器压力
  3. 提升系统并发

一级缓存:

客户端,浏览器缓存

二级缓存:

nginx.conf

1
lua_shared_dict_dis_cache 5m;

三级缓存:

redis等

需要借助OpenResty,可以构造出足以胜任10k乃至1000k以上的并发连接响应的高性能web应用系统。

需要写lua脚本

key设计

1
2
3
4
5
6
product:id:1:name # 可以很清楚看出是存储的是商品,id为1的商品名

order:uid:1:info # 可以很清楚的看到是存储的用户id为1的订单的信息
#以上还有一个好处就是,可以使用变量
$uid = get name:snailsir:id
$info = get order:uid:$uid:info

http://www.cs-cjl.com/

缓存数据

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 单值缓存
set loginCode 736345
get loginCode
# 对象缓存
set user:1 {name:snailsir,age:3}
#批量添加缓存
mset user:1:name snailsir user:1:age 2

#获取单个缓存
get user:1
#批量获取缓存
mget user:1 user:2

hash缓存

1
2
3
4
5
hset user:1 name snailsir
hset user:1 sex 1

hmset user 1:name snailsir 1:balance 1888
hmget user 1:name 1:bakance
使用 Hugo 构建
主题 StackJimmy 设计