读懂随意使用redis

现在许多游戏服务器直接用redis 作为数据库进行使用,这对于小的游戏是个不错的选择,因为redis 的速度和使用的简单,不少稍微大的游戏使用redis 作为中间件,持久化到mysql,将一些热点数据放到redis,也是不错的补充,今天就介绍下redis在使用的过程中的一些注意点
❤️ 1、数据类型Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。我的理解,Redis 本身就是一个大的map,key 就是 字符串value的类型分为上面五种,string 就是value 是字符串hash 表示value 是个map,redis 这个大map 里面的一个value 是个map,相当于是个嵌套map,或者理解为mysql 的tablelist 数据类型是list,代表一个列表,当然也可以作为一个队列set 就是一个无序的集合,相当于Java里的setzset 是一个排序的集合,每个元素会有一个得分,自动排序,相当于treeset下图左边表示redis 的key右边表示对应的数据类型在内存中的形式图片

❤️ 2、缓存击穿缓存穿击穿的是,是指一个key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞。这个问题是很多面试会问的,其实问题很简单,无法命中缓存,直接读取数据库,导致压力过大。建议给的方案就是将缓存永不过期,一直保存在内存中。

❤️ 3、分布式锁流程逻辑:①当多个app发现此时需要去写数据的时候,我们只能让一个线程去写,通过setnx(lockKey),如果返回true,则说明拿到了锁。②此时其他的app setnx(lockKey),则会返回false,那么我们不能让他们去查询数据库,此时可以让他们休眠一段时间再试(查询缓存,没有则获取锁)。③拿到锁的app在执行完业务逻辑后,应该释放锁(删除缓存中的lockKey),为了防止拿到锁的app挂掉,那么释放锁的代码将变成不可达代码,造成死锁,那么我们应该给锁加一个有效期expire()。④但是我们设置有效期后,可能业务逻辑还没有处理

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值