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意为面向切面编程,是通过预编译方式和运行期动态代…

Java核心篇之HashMap--day6

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

Spring Boot————Spring Data JPA简介

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

LeetCode算法入门- Valid Parentheses -day11

LeetCode算法入门- Valid Parentheses -day11 题目描述: Given a string containing just the characters ‘(’, ‘)’, ‘{’, ‘}’, ‘[’ and ‘]’, determine if the input string is valid. An input string is valid if: Open brackets must be closed …

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

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

LeetCode算法入门- Longest Valid Parentheses -day12

LeetCode算法入门- Longest Valid Parentheses -day12 Given a string containing just the characters ‘(’ and ‘)’, find the length of the longest valid (well-formed) parentheses substring. 题目描述: 题目的意思是给定一个括号序列的字符串&#xff…

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

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

LeetCode算法入门- Longest Common Prefix -day13

LeetCode算法入门- Longest Common Prefix -day13 题目描述: Write a function to find the longest common prefix string amongst an array of strings. If there is no common prefix, return an empty string “”. Example 1: Input: [“flower”,“flow”…

HTMLCSS————块元素与内联元素

一、块元素与div标签 div是一个块元素&#xff0c;块元素会独占一行&#xff0c;无论它的内容有多少&#xff0c;都会独占一整行。 类似的块元素还有&#xff1a;<p>、<h1>、<h2>、<h3> 然而&#xff0c;<div>标签没有任何语义&#xff0c;就…

LeetCode算法入门- Compare Version Numbers -day14

LeetCode算法入门- Compare Version Numbers -day14 题目描述&#xff1a; Compare two version numbers version1 and version2. If version1 > version2 return 1; if version1 < version2 return -1;otherwise return 0. You may assume that the version strings a…

HTMLCSS————CSS常用选择器及优先级

选择器优先级 内联样式&#xff08;1000&#xff09;> id选择器&#xff08;100&#xff09;> 类和伪类选择器&#xff08;10&#xff09; > 元素选择器&#xff08;1&#xff09;>通配 * 选择器&#xff08;0&#xff09;> 继承的样式 一、元素选择器 作用&…

LeetCode算法入门- Merge Two Sorted Lists -day15

LeetCode算法入门- Merge Two Sorted Lists -day15 题目描述&#xff1a; Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. Example: Input: 1->2->4, 1->3-&g…

2018年度总结

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

LeetCode算法入门- Generate Parentheses -day16

LeetCode算法入门- Generate Parentheses -day16 题目描述 Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses. For example, given n 3, a solution set is: [ “((()))”, “(()())”, “(())()”, “()(())”, …

2019技术学习规划

引言 前段时间总结了一下2018年的大事小情&#xff08;《2018年度总结》&#xff09;&#xff0c;整体来说还是正能量满满&#xff0c;阅读量涨得也是蛮快的。今天&#xff0c;抽出点时间思考了一下未来一年的规划。那作为技术人才&#xff0c;规划也自然都是技术相关的&#…

LeetCode算法入门- Remove Nth Node From End of List -day17

LeetCode算法入门- Remove Nth Node From End of List -day17 题目解释&#xff1a; Given a linked list, remove the n-th node from the end of list and return its head. Example: Given linked list: 1->2->3->4->5, and n 2. After removing the seco…

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

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

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…