Java核心篇之Redis--day4

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558871.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件版本GA、RC、beta等含义

原文《软件版本GA、RC、beta等含义》 GA General Availability,正式发布的版本,官方开始推荐广泛使用,国外有的用GA来表示release版本。 RELEASE 正式发布版,官方推荐使用的版本,有的用GA来表示。比如spring。 Sta…

Java核心篇之泛型--day5

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

Spring Boot————AOP入门案例及切面优先级设置

看了这篇文章,如果你还是不会用AOP来写程序,请你打我!! .||| 引言 Spring AOP是一个对AOP原理的一种实现方式,另外还有其他的AOP实现如AspectJ等。 AOP意为面向切面编程,是通过预编译方式和运行期动态代…

Spring Boot————Spring Data JPA简介

引言 JPA是Java 持久化API的缩写,是一套Java数据持久化的规范, Spring Data Spring Data项目的目的是为了简化构建基于Spring 框架应用的数据访问技术,包括对关系型数据库的访问支持。另外也包含非关系型数据库、Map-Reduce框架、云数据服…

Spring Boot————Spring Boot启动流程分析

一、引言 Spring Boot 的启动虽然仅仅是执行了一个main方法,但实际上,运行流程还是比较复杂的,其中包含几个非常重要的事件回调机制。在实际生产开发中,有时候也会利用这些启动流程中的回调机制,做一些项目初始化的工…

Spring Boot————应用启动时的监听机制测试

引言 本文承接前面的《Spring Boot————Spring Boot启动流程分析》,主要测试一下ApplicationContextInitializer、SpringApplicationRunListener、ApplicationRunner、CommandLineRunner这四个接口实现之下的组件是何时在Spring Boot项目启动时创建并执行相关方…

2018年度总结

2018年,已经成为过去式,这360多天依旧过的很快,快到当我手扶键盘回想这一年发生的点点滴滴时,都没有任何感慨。可能我天生是个无感之人,或许,这一年的时光,无数的事故、故事已经让我变得不那么感…

Spring Boot————默认缓存应用及原理

引言 应用程序的数据除了可以放在配置文件中、数据库中以外,还会有相当一部分存储在计算机的内存中,这部分数据访问速度要快于数据库的访问,因此通常在做提升数据访问速度时,会将需要提升访问速度的数据放入到内存中,…

LeetCode算法入门- Multiply Strings -day18

LeetCode算法入门- Multiply Strings -day18 题目介绍 Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2, also represented as a string. Example 1: Input: num1 “2”, num2 “3” Output: “6” Exampl…

Linux——VMware虚拟机安装CentOS步骤

一、下载CentOS.iso镜像 最地道的下载方式就是通过官网,大多数的网上连接会直接抛出网易、华为的镜像连接,实际上这些连接都可以在官网找到: 官网地址(可直接百度搜索CentOS):https://www.centos.org/ 1…

Spring Boot——Redis安装配置与应用整合

引言 Spring Boot默认以ConcurrentHashMap作为缓存容器,但默认的缓存容器在简单的场景使用还是可以的,而作为NoSQL的代表,Redis可以做内存数据库、消息中间件都是不错的,而且有RedisDesktopManager作为可视化管理工具&#xff0c…

利用Aria2高速下载网盘文件

利用Aria2高速下载网盘文件 方法步骤: 下载文件 解压arial2,运行aria2启动.VBS添加插件,解压BaiduExporter-master.zip在Google浏览器扩展程序中chrome://extensions加载已经解压的扩展程序 选择BaiduExporter进行添加即可,打开…

MySQL——JSON_REPLACE()函数修改JSON属性值

引言 由于对mysql的函数并不了解,之前遇到了一个场景: mysql表中有一个字段res_content 是一个由longtext类型(可以理解为一个更长的varchar)保存的巨大的JSON对象,但是,由于录入的疏忽,导致这…

Spring Boot整合Redis——自定义RedisSerializer

引言 spring boot简单引入redis依赖,并使用RedisTemplate进行对象存储时,需要使存储对象实现Serializable接口,这样才能够成功将对象进行序列化。 RedisTemplate默认使用的序列化机制是JdkSerializationRedisSerializer,但实际开…

交易系统如何确保账簿100%准确

转自廖雪峰老师的《交易系统如何确保账簿100%准确》 这篇文章阐述了一个交易系统中对账功能的关键,即:时刻保证资产负债表总额始终为 0。 交易系统中,对账是一个大问题。对账处理不好,不但需要花费大量的人力去处理账簿&#xff…

通俗易懂的SpringBoot教程---day1---Springboot入门教程介绍

通俗易懂的SpringBoot教程—day1—教程介绍 教程介绍: 初级教程: 一、 Spring Boot入门 二、 Spring Boot配置 三、 Spring Boot与日志 四、 Spring Boot与Web开发 五、 Spring Boot与Docker:Docker容器 六、 Spring Boot与数据访问&#x…

Java 8中获取参数名称

本文转自廖雪峰老师的:《在Java 8中获取参数名称》 在Java 8之前的版本,代码编译为class文件后,方法参数的类型是固定的,但参数名称却丢失了,这和动态语言严重依赖参数名称形成了鲜明对比。现在,Java 8开始…

通俗易懂的SpringBoot教程---day2---Springboot配置文件

通俗易懂的SpringBoot教程—day2—Springboot配置文件 1、配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的; •application.properties •application.yml 配置文件的作用:修改SpringBoot自动配置的默认值;Spring…

Could not resolve host: 'localhost 报错解决办法

Could not resolve host: localhost 报错解决办法 面向Windows的: 零基础的我一直卡在这一步骤下: 首先要先在Windows安装curl:安装方式参考:https://blog.csdn.net/weixin_41986096/article/details/86646365 按照完之后&…

当面试官问我————为什么String是final的?

面试官:你好,能看得清下面这张图吗? 我:可以的。 面试官:恩,好的。呃,你能不能说一说为什么String要用final修饰? 我:final意味着不能被继承或者被重写,Str…