Redis

redis入门

时光总嘲笑我的痴心妄想 提交于 2020-11-24 15:01:40
介绍 Redis是目前非常流行的一款NoSql数据库 对比 Redis和Memcahe是目前非常流行的两种NoSql数据库,读可以用于服务端缓存。两者有怎么样的差异呢? 从现实来看 redis:单线程 memcache:多线程 从存储方式来看: redis:支持数据持久化和主从备份,数据更安全 memcache:数据存于内存,没有持久化功能 从功能来看: redis:除了基本的key结构外,支持多种其他复杂结构、事务等高级功能 memcache:只支持基本k-v结构 从可用性看: redis:支持主从备份、数据分片、哨兵监控 memcache:没有分片功能,需要从客户端支持 可以看出,Redis相比Memcache功能更强大,支持的数据结构也比较丰富,已经不仅仅是一个缓存服务。而Memcache的功能相对单一。 一些面试问题:持久化、分片(集群)、主从、哨兵、避免缓存击穿、避免缓存雪崩、避免缓存热点key过期 指令 通过help命名可以让我们查看到Redis的指令帮助消息: 在help后面跟上空格,然后按tab键,会看到Redis对命令分组的组名: 主要包含: @generic:通用指令 @string:字符串类型指令 @list:队列结构指令 @set:set结构指令 @sorted_set:可排序的set 结构指令 @hash:hash结构指令 指令学习地址: http:/

Redis的五种基本数据类型介绍

岁酱吖の 提交于 2020-11-24 14:42:10
  Redis作为缓存具有极其丰富的功能,比如计数器、好友关系以及排行榜等等。而Redis之所能够实现如此强大的功能,完全是依赖着它的基本数据结构。今天我们来看看Redis的五种基本的数据结构,分别是字符串(strings), 散列(hashes), 列表(lists), 集合(sets)以及有序集合(zset)。   1、字符串(strings)   绝大部分编程语言中都少不了的基本数据类型就是字符串(strings),数据库Redis也不例外。下面我们来看一下关于字符串的基本操作:   set key value 设置值   get key 获取某个key的值   mset key1 value1 key2 value2 批量设置并且是原子的,可以用来减少网络时间消耗   mget key1 key2 批量获取并且是原子的,可以用来减少网络时间消耗   incr key 自增指定key的值   decr key 自减指定key的值   incrby key value 自增指定数值   decrby key value 自减指定数值   incrbyfloat key floatvalue 增加指定浮点数,前面几个操作就可以用来实现计数器的功能。   setnx key value 如果不存在该key则可以设置成功,否则会失败,加上过期时间限制

Java面试突击第一版发布啦!

送分小仙女□ 提交于 2020-11-24 10:41:37
介绍 你可以把这个文档看做 JavaGuide 的精简版,适合面试前的突击。笔主开源的 JavaGuide(Java学习+面试指南) 地址: https://github.com/Snailclimb/JavaGuide ,目前Star数已经26.3k。 公众号后台回复关键字" Java面试突击 "即可获取下载地址,该资源笔主就永久免费提供给所有人。 概览 废话不多说,先上PDF文档概览(目前只提供给各位PDF阅读版本,阅读体验我个人觉得还是不错的!)。 第一版详细目录 一 简历该如何写 1.1 为什么说简历很重要? 1.2 这3点你必须知道 1.3 你必须知道的两大法则 1.4 项目经历怎么写? 1.5 专业技能该怎么写? 1.6 开源程序员简历模板分享 1.7 其他的一些小tips 二 Java 2.1 Java 基础知识 2.1.1 重载和重写的区别 2.1.2 String 和 StringBuffer、StringBuilder 的区别是什么?String 为什么是不可变的? 2.1.3 自动装箱与拆箱 2.1.4 == 与 equals 2.1.5 关于 final 关键字的一些总结 2.1.6 Object类的常见方法总结 2.1.7 Java 中的异常处理 2.1.8 获取用键盘输入常用的的两种方法 2.1.9 接口和抽象类的区别是什么 2.2 Java 集合框架

为什么redis主从复制基于repl_backlog_buffer环形buffer而不是aof 做增量复制?

ぃ、小莉子 提交于 2020-11-24 06:51:52
AOF 对于实时性要求不是很苛刻的情况下一般是不开起的 RDB读取快,这样从库可以尽快完成RDB的读取,然后入去消费replication buffer的数据。 如果是AOF的话,AOF体积大,读取慢,需要更大的replication buffer,如果一个主节点的从节点多的话,就需要更大的内存去处理; AOF文件是append追加模式,同时读写需要考虑并发安全问题,并且AOF是文本文件, 体积较大,浪费网络带宽。 这里的repl_backlog_buffer是不需要落盘的,性能也比AOF好太多 因为RDB、AOF已经保证了可用性 来源: oschina 链接: https://my.oschina.net/u/3847203/blog/4562322

Redis 击穿、穿透、雪崩的解决方案

有些话、适合烂在心里 提交于 2020-11-24 06:35:16
Redis 击穿、穿透、雪崩的解决方案 击穿和穿透 场景: 指的是单个key在缓存中查不到,去数据库查询(透过redis去查db叫击穿) 区别: 击穿:数据在数据库中真实存在,缓存丢失,大量请求击穿数据库 穿透:数据在缓存中没有,数据库中也没有,就好像透过数据找数据一样 where id = 'xxx' (xxx在redis中不存在 -> 查DB) while(true) { where id = UUID; } 雪崩 查询key并且出现"高并发",缓存中失效或者查不到,然后都去db查询,导致db压力飙升,从而崩溃。 解放方案 1.当查询数据不存在的时候,给设置一个空值的key进去并设置一个过期时间(最多5分钟)。"比较粗暴" 2.过滤器: 布隆过滤器:(Bloom Filter),google 的 Gauva 包中有布隆过滤的实现。 核心实现是一个超大的位数组和几个哈希函数。用到哈希就一定会存在哈希碰撞的问题(涉及到哈希算法的问题)。 可以理解为一个不怎么精确的set结构,使用 contains 方法判断某个对象是否存在。 只要参数设置的合理,它的精确度可以控制的相对足够精确,只会有小小的误判概率。 当布隆过滤器说某个值存在时,这个值可能不存在;当它说不存在时,那就肯定不存在。 缺点: 1.会存在一定的误判率 2.新增加的数据无法进行布隆过滤 3.数据的key不会频繁的更改

补习系列(14)-springboot redis 整合-数据读写

跟風遠走 提交于 2020-11-24 03:55:46
[TOC] 一、简介 在 补习系列(A3)-springboot redis 与发布订阅 一文中,我们介绍了使用 Redis 实现消息订阅发布的机制,并且给出了一个真实用例。 然而,绝大多数场景下 Redis 是作为缓存被使用的(这是其主要优势)。除此之外,由于Redis 提供了 AOF以及RDB两种持久化机制,某些情况下也可以作为临时数据库使用。 本次将介绍 SpringBoot 中如何使用 Redis 进行缓存读写。 Redis 的基本命令 在学习之前,需要先了解一些Redis 的基本命令,可以 参考这里 http://www.redis.cn/ 二、SpringBoot Redis 读写 A. 引入 spring-data-redis 添加依赖 <!-- redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>${spring-boot.version}</version> </dependency> spring-boot-starter-redis在1.4版本已经废弃 配置redis连接 application.properties # redis 连接配置

string类型的应用场景 —— Redis实战经验

♀尐吖头ヾ 提交于 2020-11-24 03:53:42
     string类型是实战中应用最多的数据类型,Redis的一些特性决定了string类型的应用场景。   1. Redis的数据是共享的   如果将用户信息存储在web服务的本地缓存,则每个web服务都会缓存一份,当用户修改昵称时,需要通知其它web服务更新用户缓存。   如果将用户信息存储在Redis,则只有一份缓存,所有的web访问的都是同一份缓存,当用户修改昵称时,所有web服务都能同时访问到最新的缓存。   2. Redis是单线程的   由于Redis的性能瓶颈在于内存读写速度,而不是CPU,设计者将Redis设计成了单线程模式,其所有操作都是原子性的,避免了多线程带来的复杂性。   基于以上两点特性,Redis的string类型主要有以下应用场景。   1. 计数器   string类型的incr和decr命令的作用是将key中储存的数字值加一/减一,这两个操作具有原子性,总能安全地进行加减操作,因此可以用string类型进行计数,如微博的评论数、点赞数、分享数,抖音作品的收藏数,京东商品的销售量、评价数等。   2. 分布式锁   string类型的setnx的作用是“当key不存在时,设值并返回1,当key已经存在时,不设值并返回0”,“判断key是否存在”和“设值”两个操作是原子性地执行的,因此可以用string类型作为分布式锁,返回1表示获得锁

Redis是什么? —— Redis实战经验

若如初见. 提交于 2020-11-24 03:38:10
     REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo编写的开源的、基于键值对的缓存与存储系统,它具有以下特点:   1. 高性能   Redis具有极高的性能,其读的速度可达 11万次/秒,写的速度可达8万次/秒 。    2. 数据结构丰富   Redis相比大多数其它Key-Value存储系统,有着更丰富的数据结构,包括了 字符串(string)、哈希(hash)、列表(list)、无序集合(set)、有序集合(sorted set) 。    3. 高可用   Redis3.0支持分布式集群,集群可以是多主多从,数据自动从主节点备份到从节点,当主节点发生异常时,可由其对应的从节点顶替,以保持整个集群的高可用。   4. 易于扩展   Redis3.0支持分布式集群,Redis所有的数据都存储在16384个槽(slot)内。创建集群时,需要把槽分配给各个主节点。扩容时,只需要把槽重新分配给新的主节点,然后开启数据迁移即可,在扩容的过程中集群仍然是可用的。     5. 原子性   Redis是单线程的,其所有操作都是原子性的,避免了多线程带来的复杂性。   6. 可持久化   Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。      加入“Redis是什么?

写给小白看的线程和进程,高手勿入

蓝咒 提交于 2020-11-24 03:34:25
计算机的核心是CPU,它承担了计算机的所有计算任务,CPU就像一个工厂,时刻在运行着,而操作系统管理着计算机,负责任务的调度、资源的分配和管理。 图片来源于网络 进程和线程都是计算机操作系统中的基本概念,在进程和线程之上有程序,应用程序是具有某种功能的程序,运行在操作系统中。 例如,我们的桌面上都会安装QQ、酷狗音乐、微信......等,这些就是程序。当我们点击QQ运行时,QQ正常运行,此时就会开启一个进程。 因此, 「程序是静态的,而进程是动态的,程序是作为进程的运行的载体,进程会随时间,会在某一时刻消亡。」 图片来源于网络 我们运行程序开启的进程,我们可以在任务管理器中可以查看,当我们再次点击QQ,登陆另一个账号的时候又会开启一个进程。 打个比喻:前面我们把CPU比作一个工厂,那么程序就好像工厂里面的车间。 图片来源于网络 但是,车间是静态的,车间中有多条流水线,进程就好比流水线,流水线是动态执行的,一个车间可以同时运行多条流水线,也可以只执行一条流水线或者一条流水线都不执行。 总结来说: 「程序可以包含多个进程,多个进程并发执行,相互独立,因此,进程也是系统进行资源分配和调度基本单位。」 当然,程序也可以没有启动进程,就好比车间中没有流水线,因为程序是静态的,而进程的有无就好比层间的流水线是否存在。 图片来源于网络 一条流水线上可以有很多工人,那些工人就好比是线程

支付宝架构师眼中的高并发架构

我是研究僧i 提交于 2020-11-24 02:57:47
作者:sflaqiu blog.thankbabe.com 前言 高并发经常会发生在有大活跃用户量,用户高聚集的业务场景中,如:秒杀活动,定时领取红包等。 为了让业务可以流畅的运行并且给用户一个好的交互体验,我们需要根据业务场景预估达到的并发量等因素,来设计适合自己业务场景的高并发处理方案。 在电商相关产品开发的这些年,我有幸的遇到了并发下的各种坑,这一路摸爬滚打过来有着不少的血泪史,这里进行的总结,作为自己的归档记录,同时分享给大家。 服务器架构 业务从发展的初期到逐渐成熟,服务器架构也是从相对单一到集群,再到分布式服务。 一个可以支持高并发的服务少不了好的服务器架构,需要有均衡负载,数据库需要主从集群,nosql缓存需要主从集群,静态文件需要上传cdn,这些都是能让业务程序流畅运行的强大后盾。 服务器这块多是需要运维人员来配合搭建,具体我就不多说了,点到为止。 大致需要用到的服务器架构如下: 服务器 均衡负载(如:nginx,阿里云SLB) 资源监控 分布式 数据库 主从分离,集群 DBA 表优化,索引优化,等 分布式 nosql 主从分离,集群 主从分离,集群 主从分离,集群 redis mongodb memcache cdn html css js image 并发测试 高并发相关的业务,需要进行并发的测试,通过大量的数据分析评估出整个架构可以支撑的并发量。