Redis深度学习

Redis的场景问题

1.Redis支持的数据类型

Redis(Remote Dictionary Server)最强的地方就是支持多种数据结构:StringListSetSorted Set(有序集合)、hash。因此可以用来实现很多有用的功能:如用List来做FIFO双向链表,实现一个轻量级的高性能消息队列服务;用Set可以做高性能的tag系统。除此之外Redis也可以对存入的Key-Value设置expire时间
Redis的主要缺点是数据容量受物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要是较小数据量的高性能操作和运算上。

2.Redis的优势

(1)Redis拥有丰富的数据类型
(2)Redis的读取速度很快
(3)Redis可以持久化数据,可以更好的保护数据不丢失

3.Redis的应用场景

排行版/计数器

Redis在内存中对数字的递增和递减操作的实现非常好,Set和List也使得我们在执行这些操作的时候变简单,而Redis恰好支持这两种数据结构。

消息队列

Redis 在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得 Redis 能作为一个
很好的消息队列平台来使用。Redis 作为队列使用的操作,就类似于本地程序语言(如
Python)对 list 的 push/pop 操作。

分布式锁

在很多互联网公司中都使用了分布式技术,分布式技术带来的技术挑战是对同一个资源的并发访问,如全局ID、减库存、秒杀等场景,并发量不大的场景可以使用数据库的悲观锁、乐观锁来实现,但在并发量高的场合中,利用数据库锁来控制资源的并发访问是不太理想的,大大影响了数据库的性能。可以利用Redis的setnx功能来编写分布式的锁,如果设置返回1说明获取锁成功,否则获取锁失败。

社交网络

对于社交网络来说,一般用户量是及其庞大的,此时的关系型数据库就捉襟见肘了,比如好有点赞、关注、推送等等功能,用Redis就能比较轻松地实现这些功能。

会话缓存

最常用的一种使用Redis的情景是会话缓存(session cache)。用Redis缓存会话比其他存储(如Memcached)的优势在于:Redis提供持久化。

4.Jedis和Redisson

Jedis是Redis的Java实现客户端,其API提供了比较全面的Redis命令的支持。
Redisson实现了分布式和可扩展的Java数据结构,功能比较简单,不支持字符串操作、不支持排序、事务、管道、分区等Redis特性。Redisson主要是让使用者将精力更加集中到业务逻辑的处理上。

5.Redis实现分布式锁

redis:
1.线程A setnx(上锁的对象,超时时的时间戳t1),如果返回true,获得锁。
2.线程B 用get获取t1,与当前时间戳比较,判断是是否超时,没超时false,若超时执行第3步;
3.计算新的超时时间t2,使用getset命令返回t3(该值可能其他线程已经修改过),如果t1==t3,获得锁,如果t1!=t3说明锁被其他线程获取了。
4.获取锁后,处理完业务逻辑,再去判断锁是否超时,如果没超时删除锁,如果已超时,不用处理(防止删除其他线程的锁)。

Zookeeper也能实现分布式锁

1.客户端对某个方法加锁时,在zk上的与该方法对应的指定节点的目录下,生成一个唯一的瞬时有序节点node1;
2.客户端获取该路径下所有已经创建的子节点,如果发现自己创建的node1的序号是最小的,就认为这个客户端获得了锁。
3.如果发现node1不是最小的,则监听比自己创建节点序号小的最大的节点,进入等待。
4.获取锁后,处理完逻辑,删除自己创建的node1即可。
区别:zk性能差一些,开销大,实现简单。

6.Redis的过期策略

1.定时过期(一key一定时器),惰性过期:只有使用key时才判断key是否已过期,过期则清除。定期过期:前两者折中。

 LRU:new LinkedHashMap<K, V>(capacity, DEFAULT_LOAD_FACTORY, true);

//第三个参数置为true,代表linkedlist按访问顺序排序,可作为LRU缓存;设为false代表按插入顺序排序,可作为FIFO缓存

2.LRU算法实现:1.通过双向链表来实现,新数据插入到链表头部;2.每当缓存命中(即缓存数据被访问),则将数据移到链表头部;3.当链表满的时候,将链表尾部的数据丢弃。
LinkedHashMap:HashMap和双向链表合二为一即是LinkedHashMap。HashMap是无序的,LinkedHashMap通过维护一个额外的双向链表保证了迭代顺序。该迭代顺序可以是插入顺序(默认),也可以是访问顺序。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值