linux使用docker安装redis及与原子操作、缓存的三大问题

在虚拟机中,

mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf

拉取镜像

docker pull redis

docker run -p 6379:6379 --name redis
-v /mydata/redis/data:/data
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf
-d redis redis-server /etc/redis/redis.conf

docker自启

docker update redis --restart=always

redis原子操作-令牌的对比和删除必须保证原子性(通过lure脚本原子验证令牌和删除令牌)

 String script =
  "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
        Long result = redisTemplate.execute(new DefaultRedisScript<Long>(script, Long.class),
                Arrays.asList(USER_ORDER_TOKEN_PREFIX + memberResponseVo.getId()),
                orderToken);

缓存三大问题

雪崩,穿透,击穿

雪崩

雪崩: 10万条数据同时失效,100万个人访问数据库就会蹦
解决:设置随机失效时间

穿透

穿透:缓存中没有null数据,数据库也没有,当时被人利用发100万的请求一个没有的数据,就会崩溃
解决:每次查询都把null数据也放入缓存中,必要的话可以设置过期时间

击穿

击穿:一个热点key,设置了过期时间,某个时刻失效了,正好100万人访问,因为缓存没有,100万个人同时查询数据库,
解决:加锁,如果过期了,就让一个人去查,其他人等待

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值