redis

本文详细介绍了Redis中的五大数据结构及其特性,包括string、list、hash、set和zset,并讨论了Redis的内存回收机制、过期与淘汰策略。此外,还深入探讨了RDB与AOF两种持久化方式,以及主从同步的增量与快照同步方法。文章最后提到了Redis的限流、分布式锁的应用及一些最佳实践。
摘要由CSDN通过智能技术生成

redis应用

  • 五种数据结构:string/list/set/hash/zset
  • string是动态字符串,可以通过append追加。类似于java中的arraylist,采用的是预分配冗余空间来减少内存空间的频繁分配,当字符串小于1M时,扩容都是加倍现有空间,当大于1M时,扩容是增加1M空间,redis字符串最大是512M。
  • list相当与java中的linkedlist(其实不是,ziplist和quicklist),删除和插入非常快,定位索引慢
  • hash,相当于java中的hashmap,但是不同的是,值只能是字符串,而且rehash的方式不同,采用的渐进式的rehash。
  • zset。底层采用跳跃列表支持随机的插入和删除
  • 以下几点:
  1. list/set/hash/zset如果容器不存在就创建一个进行操作

  2. list/set/hash/zset如果容器中元素没有了,立即删除元素,释放内存

  3. 设置了过期时间,又调用set方法修改他,那么过期时间失效。

  • 分布式锁。使用setnx抢占锁,使用del删除锁

  1. 但是如果在del之前setnx抢占成功之后程序处理失败了,会导致锁永远释放不掉,这是后就会考虑给锁加一个失效时间;但是在加锁之后立刻程序挂掉了,没有执行失效时间,那么这个锁也永远释放不了,所以在redis2.8之前,redis社区为了解决这个想到了很多办法,2.8之后,在set方法上可以同时添加一个过期时间。

  2. 同时获得锁并设置了过期时间,但是在过期时间失效之前,还没处理完,就会有下一个锁进来,就会处理异常,这种情况之后再考虑。

  3. 可重入锁,指线程在持有锁的情况下,支持同一个线程的多次加锁。

  • 事务
  1. 把一批操作加入到队列中,执行exec方法时,全部执行,其实相当于跟其他操作隔离开,不被其他
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值