Java核心篇之Redis–day4

  1. Redis有哪些数据结构?
    字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。

    1.String:字符串,常用命令:get,set,decr,incr,mget(查询多个key)
    2.Hash类型:hset(添加赋值)/hget(查询)/hgetall(查询所有字段和值)等。
    3.list(列表类型):lpush(列表头部添加元素)/rpush(列表尾部添加元素)/lpop(头部删除元素)/rpop(尾部删除元素)/lrange(查询元素):不支持嵌套其他数据类型,应用场景很多,存储文章评论列表,存储用户的粉丝列表,黑名单列表等,也可以作为重要的消息队列来使用。Redis的list数据结构的实现是一个双向链表,支持正向反向遍历查找,方便用户操作的同时,也增加了内存开销。
    4.Set集合类型:Redis集合是字符串的不重复无序结构。常用命令有sadd(添加元素)/spop(删除)/smembers(查询)/sunion(添加多个集合)等,不支持嵌套其他数据类型,提供自动去重的功能(内部实现是一个value永远为null的hashmap)
    5.Zset(sorted set)在set基础上关联一个score,通过score来实现排序的功能。(应用到的场合:实现文章按点击量排序,微博热搜榜,论坛热帖)

  2. 高级应用:

    1. Redis发布订阅功能:发布订阅是一种消息的通信模式:发布者发布信息,订阅者接受信息,主要是为了解耦消息的发布者和订阅者,redis作为一个发布订阅的server,在订阅和发布之间起到了消息路由的作用。订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息类型,redis将消息类型称为通道channel。当发布者向redis server发布特定类型的消息的时候,订阅该消息的所有client都会收到此消息。
    2. Redis支持事务功能:Redis的事务功能主要是保证同一个client发起的事务中的命令可以连续执行,而中间不会插入另一个客户端的命令。当一个客户端发起事务命令multi时,这个连接会进入一个事务上下文,该命令后续的命令不会立即执行,而是先放到一个queue中,当此连接收到exec命令后,redis才会顺序的执行队列中的命令,如何将所有命令结果返回给客户端。
    3. Redis的管道功能:Redis管道功能是指客户端在同一个请求中同时发送多个命令,在这个过程中无需等待每个命令的响应,而是在组合读取每个命令的响应回复。
    4. Redis的持久化功能:Redis 是一个基于内存的数据库,但是他也是支持数据持久化的,如果业务需要,可以开启业务持久化的功能,将内存数据持久化到磁盘中,从而保证数据的安全和完整性。
    5. 两种常用的持久化方式有:RDB(redis database)AOF(append only file)两种常用的持久化方式有:
    6. RDB(redis database)AOF(append only file)RDB(redis database)AOF(append only file)
      RDB:在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上;
      AOF:将执行过的指令记录下来,在数据恢复时按照从前到后的顺序再将指令都执行一遍,从而恢复数据。
  3. Redis作为一个内存数据库,优势如下:使用redis的好处:快速,持久化,事务原子性,单线程,缓存,多种类型

    1. (1)异常快:Redis非常快,每秒可执行大约110000次的设置(SET)操作,每秒大约可执行81000次的读取/获取(GET)操作。
    2. (2)支持丰富的数据类型: Redis支持开发人员常用的大多数数据类型,例如列表、集合、排序集和散列等等。
    3. (3)操作具有原子性:单进程单线程作业,所有操作都是原子操作,这确保如果两个客户端并发访问,Redis服务器能接收更新的值。
    4. (4)多实用工具:是一个多实用工具,可用于多种用例,如:缓存、消息队列(Redis本地支持发布/订阅)、应用程序中的任何短期数据。例如,WEB应用程序中的会话、网页命中计数等。
  4. 使用过Redis分布式锁么,它是什么回事?

  5. 先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记了释放。
    这时候对方会告诉你说你回答得不错,然后接着问如果在setnx之后执行expire之前进程意外crash或者要重启维护了,那会怎么样?
    这时候你要给予惊讶的反馈:唉,是喔,这个锁就永远得不到释放了。紧接着你需要抓一抓自己得脑袋,故作思考片刻,好像接下来的结果是你主动思考出来的,然后回答:我记得set指令有非常复杂的参数,这个应该是可以同时把setnx和expire合成一条指令来用的!对方这时会显露笑容,心里开始默念:摁,这小子还不错。https://juejin.im/post/5b16148a518825136137c8db

Java核心篇之Redis--day4相关推荐

  1. Java分布式篇4——Redis

    Java分布式篇4--Redis 1.互联网架构的演变历程 1.1.第一阶段 数据访问量不大,简单的架构即可搞定! 1.2.第二阶段 数据访问量大,使用缓存技术来缓解数据库的压力 不同的业务访问不同的 ...

  2. Java核心篇之HashMap--day6

    Java核心篇之HashMap–day6 HashMap是一种键值对的数据结构,以数组与链表的形式(key:value)实现,查询性能和添加性能很好.他是通过将key进行hashcode()映射函数来 ...

  3. Java核心篇之泛型--day5

    Java核心篇之泛型–day5 泛型是JDK5时引入的一个新特性,泛型提供了编译时类型安全检查的机制,该机制允许程序猿在编译时检测到非法的类型输入. 泛型的本质是参数化类型,也就是说操作的类型被指定为 ...

  4. Java核心篇之Java锁--day2

    Java核心篇之Java锁–day2 乐观锁:乐观锁是一种乐观思想,即认为读多写少,每次去取数据的时候都认为其他人不会修改,所以不会上锁:但是在更新的时候会判断一下在此期间别人有没有去修改它,如果有人 ...

  5. Java核心篇之JVM--day3

    Java核心篇之JVM--day3 Java JVM详解--通俗易懂教程 JVM:Java虚拟机的简称. 谈到JVM,通常会聊到三个问题: 1. 什么时候触发Java GC? 2. 对什么东西进行Ja ...

  6. Java核心篇之多线程---day1

    Java面试之多线程-day1 一. 线程中sleep方法与wait方法有什么区别? 对于 sleep()方法,我们首先要知道该方法是属于 Thread 类中的.而 wait()方法,则是属于Obje ...

  7. BAT 大厂Java 面试题集锦之核心篇附参考答案

    核心篇 数据结构与算法 网路:TCP/IP, HTTP 操作系统, 文件, shell, CPU, IO, epoll, 非阻塞IO, 进程/线程/协程,锁 HashMap, ConcurrentHa ...

  8. 进大厂一条龙服务(Java核心面试知识点+一线大厂Java笔试面试题+月薪3万Java优秀简历模板),看这篇就够了

    你有没有觉得Java_工程师竞争压力大.就业困难?不知道面试Java工程师应该准备些什么?.. 现在一切都解决了!你想要的干货知识和面试题统统在这,还有月薪3万Java优秀简历模板,快拿回去嚼烂吧! ...

  9. 【第三章:Java开发岗:Redis篇】

    点击:[第一章:Java开发岗:基础篇] HashMap.Synchronized.ThreadLocal.AQS.线程池.JVM内存模型.内存屏障.class文件结构.类加载 机制.双亲委派.垃圾回 ...

最新文章

  1. Java高效读取大文件
  2. Java开源并行计算组件Multi-Task
  3. 推荐系统实践-第一章
  4. 提升我的工作效率(一)--常用的快捷键
  5. SQL Server in Docker - 还原数据库
  6. linux mysql启动_MySQL 安装(二)
  7. 010. 使用.net框架提供的属性
  8. centos mysql二进制包_centos mysql5.7 二进制包安装
  9. 读书笔记Black-Scholes-Merton之二
  10. Android多媒体开发(3)————使用Android NKD编译havlenapetr-FFMpeg-7c27aa2
  11. 怀念的不是初恋,是那段时光
  12. 计算机二级2018VB题库百度云,2018年计算机二级VB考试真题
  13. matlab 数值积分求面积,用几种数值积分的方法计算地图面积
  14. 中山大学3D游戏设计读书笔记 unity3D Note9
  15. EMD基础学习---emd例子
  16. 7-5 最佳情侣身高差c语言
  17. 企业计算机培训目的是什么意思,企业进行员工培训的目的是什么?
  18. 云计算之虚拟化技术概述(KVM/Xen/Hyper-V/VMware)
  19. win10专业版切换语言失败
  20. 创建win10介质进度为0_win10安装介质

热门文章

  1. 带有Python示例的math.exp()方法
  2. 分布式ID生成的9种方法,特好用!
  3. Spring Cloud Alibaba 深度解密!
  4. Redis 键值过期操作
  5. 面试官:使用SpringBoot如何开发邮件发送系统?
  6. 面试官:聊一下二分法
  7. golang开发环境配置及Beego框架安装
  8. 简单的ajax上传商品功能使用SevletFileUpload和FormData
  9. Java中Thread类的方法简介
  10. 人类跌落梦境显示无法连接服务器,人类跌落梦境手游进不去闪退怎么办 人类跌落梦境无法进入解决方法...