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深度历险:核心原理和应用实践》学习笔记一的更多相关文章

  1. Java多线程编程实战指南(核心篇)读书笔记(五)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76730459冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  2. Java多线程编程实战指南(核心篇)读书笔记(四)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76690961冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  3. Java多线程编程实战指南(核心篇)读书笔记(三)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76686044冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  4. Java多线程编程实战指南(核心篇)读书笔记(二)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76651408冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  5. Java多线程编程实战指南(核心篇)读书笔记(一)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76422930冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  6. 《Java多线程编程实战指南(核心篇)》阅读笔记

    <Java多线程编程实战指南(核心篇)>阅读笔记 */--> <Java多线程编程实战指南(核心篇)>阅读笔记 Table of Contents 1. 线程概念 1.1 ...

  7. 学习笔记《Java多线程编程实战指南》三

    3.1串行.并发与并行 1.串行:一件事做完接着做下一件事. 2.并发:几件事情交替进行,统筹资源. 3.并行:几件事情同时进行,齐头并进,各自运行直到结束. 多线程编程的实质就是将任务处理方式由串行 ...

  8. 学习笔记《Java多线程编程实战指南》二

    2.1线程属性 属性 属性类型及用途  只读属性  注意事项 编号(id) long型,标识不同线程  是  不适合用作唯一标识 名称(name) String型,区分不同线程  否  设置名称有助于 ...

  9. 学习笔记《Java多线程编程实战指南》一

    1.1什么是多线程编程 多线程编程就是以线程为基本抽象单位的一种编程范式,和面向对象编程是可以相容的,事实上Java平台中的一个线程就是一个对象.多线程编程不是线程越多越好,就像“和尚挑水”的故事一样 ...

  10. Java多线程编程实战指南 设计模式 读书笔记

    线程设计模式在按其有助于解决的多线程编程相关的问题可粗略分类如下. 不使用锁的情况下保证线程安全: Immutable Object(不可变对象)模式.Thread Specific Storage( ...

随机推荐

  1. 对getBoundingClientRect属性的研究

    1.getBoundingClientRect用于获取某个元素相对于视窗的位置集合.集合中有top, right, bottom, left等属性. .top:元素上边到视窗上边的距离; right: ...

  2. ht-5 treemap特性

    (1)TreeMap类通过使用红黑树实现Map接口 (2)TreeMap提供按排序顺序存储键值对的有效手段,同时允许快速检索 (3)不同于散列映射,树映射保证它的元素按键的自然顺序升序排列 (4)Tr ...

  3. 阿里云祝顺民(江鹤):云原生SDWAN加速企业上云 引领未来智能网络

    第二届中国SD-WAN峰会于11月16日在北京盛大开幕,阿里云以黄金赞助商之名隆重参与.作为全球前三,亚太第一的云计算厂商,阿里云一直引领云网技术的演进及应用落地.过去一年,阿里云发布以云为中心的云原 ...

  4. BZOJ 2226: [Spoj 5971] LCMSum 莫比乌斯反演 + 严重卡常

    Code: #pragma GCC optimize(2) #include<bits/stdc++.h> #define setIO(s) freopen(s".in" ...

  5. HTML中<input>和<textarea>的区别

    在HTML中有两种方式表达文本框 一个是<input>元素的单行文本框 一种是<textarea>的多行文本框. <input>元素: 1.一定要指定type的值为 ...

  6. xiugai完了

    <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Conten ...

  7. JS实现多Div模块拖拽功能

    空闲时间,同事让帮忙整个JS拖拽div模块功能.于是便在网上搜索,总结如下一个可实现多div模块拖拽的功能.一下是整体的HTML代码, 里边可以控制到 拖拽开始(onStart),拖拽时候(onMov ...

  8. Windows 环境下vue+webpack前端开发环境搭建

    一.开发环境搭建 1.前端框架一般依赖node.js,我们首先要安装node.js. 2.由于许多npm 的源都在国外的地址,安装起来特别慢,所以我们这里利用淘宝的镜像服务器. 安装命令为:npm i ...

  9. php面向对象重的抽象类,接口类与静态

    static 静态 <?php class ren { public $name; public static $sex; static function shao() { echo " ...

  10. python 微服务方案

    介绍 使用python做web开发面临的一个最大的问题就是性能,在解决C10K问题上显的有点吃力.有些异步框架Tornado.Twisted.Gevent 等就是为了解决性能问题.这些框架在性能上有些 ...