《Redis深度历险:核心原理和应用实践》学习笔记一
1.redis五种数据结构
1.1 String字符串类型,对应java字符串类型
用户信息序列化后,可以用string类型存入redis中
批量读写string类型,见效网络消耗
数字类型的string类型,可以自增自减操作,有一个大小限制。
1.2 list类型,对应java的LinkedList,链表结构。
增删O(1),查询O(n)
异步队列,一边线程塞入,一边线程取出消费。
结构又和java的不同,多个ziplist组合成quicklist
1.3hash字典类型,对应java的HashMap,是数组+链表结构。
扩容:java是一次性rehash,redis渐进rehash,redis新旧结构两个一起存,然后定时任务慢慢移动,保证了高性能。
可以存储用户单个对象,好处是可以获得单个字段,坏处比起String类型架构占用更多的空间。
1.4set(集合)对应java中的HashSet,无序不重复。
可以做抽奖,去重保证一个人不会中奖两次。
1.5zset(有序集合)
存粉丝:value用户id,socre关注时间。
学生成绩:value学生成绩,socre学生分数
数据结构跳跃列表结构,分等级结构,这样快速的定位插入。
2.应用一:分布式锁
获得锁
setnx key value
存活时间
expire key time
中间异常没有释放锁,加一个存活过期时间解决。
不是原子操作?redis2.8用一条命令操作,后面学习。
超时问题,后面学习。
可冲入锁,后面学习。
3.应用二:延迟队列
异步消息队列,不能保证消息可靠性极致的追求。
list(列表)作为异步消息队列的使用,rpush/lpush入队列,lpop/rpop出队列。
队列空了怎么办?一直获取对cpu有压力,java休眠1s,会有延迟,多个消费者可以降低延迟。
上面问题可以用 blpop/brpop解决,b表示blocking,也就是阻塞读,没有数据就会自动休眠,完美解决上面的问题。注意:长时间没有数据,服务器会断开空闲连接,java编写客户端消费者注意捕获异常进行重试。
锁冲突处理?当前无法获得锁
抛出异常,通知用户稍后重试,调到对话框让用户点击重试,进行重试控制。
sleep 一会再重试。会阻塞当前的消息处理线程,导致队列的后续消息处理出现延迟。
请求转入延时队列中,过一会再试,适合异步消息处理。
延时队列实现?没看懂,后面再学习。
《Redis深度历险:核心原理和应用实践》学习笔记一的更多相关文章
- Java多线程编程实战指南(核心篇)读书笔记(五)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76730459冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java多线程编程实战指南(核心篇)读书笔记(四)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76690961冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java多线程编程实战指南(核心篇)读书笔记(三)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76686044冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java多线程编程实战指南(核心篇)读书笔记(二)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76651408冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java多线程编程实战指南(核心篇)读书笔记(一)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76422930冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- 《Java多线程编程实战指南(核心篇)》阅读笔记
<Java多线程编程实战指南(核心篇)>阅读笔记 */--> <Java多线程编程实战指南(核心篇)>阅读笔记 Table of Contents 1. 线程概念 1.1 ...
- 学习笔记《Java多线程编程实战指南》三
3.1串行.并发与并行 1.串行:一件事做完接着做下一件事. 2.并发:几件事情交替进行,统筹资源. 3.并行:几件事情同时进行,齐头并进,各自运行直到结束. 多线程编程的实质就是将任务处理方式由串行 ...
- 学习笔记《Java多线程编程实战指南》二
2.1线程属性 属性 属性类型及用途 只读属性 注意事项 编号(id) long型,标识不同线程 是 不适合用作唯一标识 名称(name) String型,区分不同线程 否 设置名称有助于 ...
- 学习笔记《Java多线程编程实战指南》一
1.1什么是多线程编程 多线程编程就是以线程为基本抽象单位的一种编程范式,和面向对象编程是可以相容的,事实上Java平台中的一个线程就是一个对象.多线程编程不是线程越多越好,就像“和尚挑水”的故事一样 ...
- Java多线程编程实战指南 设计模式 读书笔记
线程设计模式在按其有助于解决的多线程编程相关的问题可粗略分类如下. 不使用锁的情况下保证线程安全: Immutable Object(不可变对象)模式.Thread Specific Storage( ...
随机推荐
- 算法-python
选择排序:一个列表被分为无序列表和有序列表,选择排序就是拿无序列表的第一个和后面的每一个相比较,每一趟选择出最小的一个,添加进有序列表. def select_sort(list): for i in ...
- 【HDOJ6655】Just Repeat(贪心)
题意:A和B两个人玩游戏,分别有n和m张牌,A的第i张牌是a[i],B是b[i] 两人轮流出牌,如果一种编号的牌被其中一个人出了另一个人就不能出自己手中这个编号的牌 两人都按最优策略行动,问获胜者 思 ...
- ASP 转换HTML特殊字符
Function HtmlDecode(ByVal s) If Has(s) Then s = regReplace(s, "<br\s*/?\s*>", vbCrLf ...
- [CSP-S模拟测试]:Simple(数学)
题目描述 对于给定正整数$n,m$,我们称正整数$c$为好的,当且仅当存在非负整数$x,y$,使得$n\times x+m\times y=c$. 现在给出多组数据,对于每组数据,给定$n,m,q$, ...
- 文件的上传与下载实现(react、express,create-react-app脚手架)
项目结构为前后端分离,中间布了一层node. 文件上传 要求:将文件信息等发送到后台. html代码 <input type="file" name="file&q ...
- CSU 1548 Design road(三分查找)
题目链接:https://cn.vjudge.net/problem/142542/origin Description You need to design road from (0, 0) to ...
- 小程序的开发框架MINA及小程序的启动机制
MINA框架分三个部分 视图层(View):有很多页面,每个页面有wxml和wxss组成的,视图结构和展现样式 逻辑层(App Service):处理事物逻辑的地方以及数据交互的服务中心 系统层(Na ...
- 每天一个Linux指令
开始详细系统的学习linux常用命令,坚持每天一个命令,所以这个系列为每天一个linux命令.学习的主要参考资料为: 1.<鸟哥的linux私房菜> 2.http://codingstan ...
- PHP常用工具函数之手机号相关
1.手机号正确与否判定 //测试手机号 $phone = '17777777777'; $pattern = '/^1[356789]\d{9}$/'; $is = preg_match($patte ...
- druid spring监控配置
方法一: <bean id="seckillServiceImpl" class="org.seckill.service.impl.SeckillServiceI ...