《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( ...
随机推荐
- Jenkins插件--通知Notification
参考来源:http://blog.csdn.net/wangmuming/article/details/22925357 ============================ 题外话 邮箱配置需 ...
- Task7.卷积神经网络
卷积定义: 所谓卷积,其实是一种数学运算.但是在我们的学习生涯中,往往它都是披上了一层外衣,使得我们经常知其然不知其所以然.比如在信号系统中,他是以一维卷积的形式出现描述系统脉冲响应.又比如在图像处理 ...
- deque的简单使用
depue 是python提供的一个数据结构,线程安全,功能比list强大 from collections import deque user_list = ['admin', 'root'] us ...
- c#类的定义,c#中的关健字,C#标识符
什么是类:一种数数据结构,存储数据成员,方法成员,和其它的内容,便 于方便 谳用C#语法: class 类名{ //TODO} C#中关键字(小写)不能作为方法名,类名,命名空间名等, static ...
- php stripos()函数 语法
php stripos()函数 语法 作用:寻找字符串中某字符最先出现的位置,不区分大小写.直线电参数 语法:stripos(string,find,start) 参数: 参数 描述 string ...
- Spring JDBCTemplate 简单使用
Spring JDBCTemplate applicationContext.xml配置 <?xml version="1.0" encoding="UTF-8&q ...
- Python 测评工具
开源--Python测评工具 Github仓库 本次实验作业的测评工具仅使用Python语言编写. 程序思路是基于文本的快速匹配. 编译test.py运行 1.GUI界面 GUI界面使用了PyQt5完 ...
- LightOJ 1342 Aladdin and the Magical Sticks [想法题]
题目链接 : http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=27050 --------------------------- ...
- day09—css布局解决方案之全屏布局
转行学开发,代码100天——2018-03-25 今天,本文记录全屏布局的的方法.全屏布局,即滚动条不是全局滚动条,而是出现在内容区域内,:浏览器变大时,撑满窗口. 如:设置下图中布局,其中top区, ...
- poj2010 Moo University - Financial Aid 优先队列
Description Bessie noted that although humans have many universities they can attend, cows have none ...