redis必会
1.NosqL
非关系型数据库,里面包含Redis和MondoDB
2.为什么会用到关系型数据库?因为当数据量太多,访问人数过多的时候,在访问关系型数据库时会到硬盘里进行读写过多
这样就会导致访问速度很慢,服务器压力很大。
3.这个时候,我们就可以使用非关系型数据库,它相当于一个缓存区,
把一些经常用的数据放到缓存区里,当用户使用时直接到缓存区中去读取,缓存区找不到再去Mysql中拿。
比如12306首页、天猫0点抢购,会把一本分数据放到缓存区里
4.
列表[] ----->支持增删改查,数据类型多样--顺序表
元组() ----->不支持增删改查,只能读
集合{} ----->支持增删改查,元素不重复
字典{} ------>以键值对存储,支持增删改查
面试题:对列表进行去重,可以先将其先转换成集合,在转换回去
a= [1,1,2,2,3,3,]
b = set(a)
a = list(b)
5.redis 是以健命令来进行增删改查的。就根据键来找值,键值对的NoSQL,即一个健对应一个值,键的类型永远都是字符串,
这个值可以是字符串哈希列表等数据类型。
1)建命令
* KEYS+正则 查找当下存在的健
* EXISTS KEY... 判断建是否存在,如果存在返回1,不存在返回0
* TYPE KEY 查看健对应VALUE的类型
* DEL KEY 会将该建以及对应的值都删除
* expire KEY +seconds 设置时间
* TTL KEY 查看建存在的时间
2)String
* 最基本的数据类型,最大存储521MB,可以存储二进制的任何数据,图片、数字、系列化对象
* SET KEY value 设置一个键值对
* SETES KEY seconds value 设置键值及其过期时间,以s为单位
* MSET key value key value 设置多个键值
* GET key 通过健获取值
* MGET key 获取多个值
* append key value 追加一个值
* strlen key 查看长度
3)Hash
* 用于存储对象,对象的格式是键值对(可以理解为存进去一个字典)
* HSET key field value 设置单个属性
* HMSET key field value key field value 设置多个
* HGET key field 获取 该建的属性对应的值 获取多个HMGET
* HGETALL KEY 获取该健存储的所有属性所有值。
4)list
* 用与存储一个列表,列表中元素是String,按照插入顺序排序
* LPUSH key value value 在该健头部添加
* RPUSH key value value 在改建尾部添加
* LINSERT KEY before|after pivot value 在一个元素的左面或者右边添加一个元素,pivot表示索引
* LPOP KEY 从左侧拿并删除
* RPOP KEY 从右侧拿并删除
* lrange key start stop 从列表中按照索引值遍历出响应元素 并不删除
* Ltrim key field 裁剪
5)set 无序集合、与列表类似、元素string类型、元素唯一不重复
* SADD KEY member member 添加元素
* Smembers key 获取元素
* SCARD KEY 返回元素的个数
* SINTER KEY1 KEY2 .. 求多个集合的交集
* SDIFF KEY1 KEY2.. 求多个集合的差集
* SUNION KEY1 KEY2 .. 求多个集合的合集
* SISMEMBER key member 判断一个元素是否在集合中
5)zset ——> sorted set 与set类似,但是是有序,通过score表示权重,根据权重来将元素排序
* ZADD KEY score member score1 member1...
* zrange key start stop 获取有序集合的元素
* ZCARD 返回元素个数
* ZSCORE KEY MEMBER 查看该元素的权重
6.发布订阅设计模式
设计模式:redis支持消息的发布与订阅,不需要进行主动请求,自动进行信息更新。
客户端订阅服务端,服务端有新消息,不需要客户端请求,直接发过去,长连接。
7.利用redis搭建主从集群,可以实现备份功能
只要改配置文件即可,更改配置文件bind
将一个bind更改为自己ip作为主
另一加slave ip 作为从,可以将主的数据存储备份
特点:
master/slave 角色
master/slave 数据相同
降低 master 读压力在转交从库
问题:
无法保证高可用
没有解决 master 写的压力
8.redis更容易搭建集群,redis可以登陆完善
9.使用过Redis做异步队列么,你是怎么用的?有什么缺点?
一般使用list结构作为队列,rpush生产消息,lpop消费消息。当lpop没有消息的时候,要适当sleep一会再重试。
缺点:
在消费者下线的情况下,生产的消息会丢失,得使用专业的消息队列如rabbitmq等。
能不能生产一次消费多次呢?----发布订阅模式
使用pub/sub主题订阅者模式,可以实现1:N的消息队列。
10.使用过Redis分布式锁么,它是怎么实现的?
先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记了释放。
如果在setnx之后执行expire之前进程意外crash或者要重启维护了,那会怎么样?
set指令有非常复杂的参数,这个应该是可以同时把setnx和expire合成一条指令来用的!
redis必会的更多相关文章
- 新人入坑Redis必会的吐血总结
新人入坑Redis必会的吐血总结 一.什么是Redis Redis是一个使用C语言开发的开源的高性能的key-value存储系统,我们可以把它近似理解为Java Map.简单来讲,Redis是一种NO ...
- redis必知会
Redis 是单进程单线程的? Redis 是单进程单线程的,redis 利用队列技术将并发访问变为串行访问,消 除了传统数据库串行控制的开销. Redis 的持久化机制是什么?各自的优缺点? Red ...
- Redis必知必会系列
1.常用命令 https://www.cnblogs.com/huozhonghun/p/11636053.html 2.Redis是什么 Redis 是 C 语言开发的一个开源的(遵从 BSD 协议 ...
- 阿里Java面经大全(整合版)
本文里的面经内容全部来源于牛客网,作为秋招备战复习与查缺补漏时使用.里面部分面经有我的注释和想法,以及部分解答,不一定正确,大家可以查询补充. 阿里巴巴,三面,java实习 昨天晚上11点打电话来,问 ...
- Redis-01-基础
基本概念 1 基本概念 redis是一个开源的.使用C语言编写的.支持网络交互的.可基于内存也可持久化的Key-Value数据库(非关系性数据库) redis运维的责任 1.保证服务不挂 2.备份数据 ...
- 互联网公司面试必问的Redis题目
Redis是一个非常火的非关系型数据库,火到什么程度呢?只要是一个互联网公司都会使用到.Redis相关的问题可以说是面试必问的,下面我从个人当面试官的经验,总结几个必须要掌握的知识点. 介绍:Redi ...
- 使用Code First建模自引用关系笔记 asp.net core上使用redis探索(1) asp.net mvc控制器激活全分析 语言入门必学的基础知识你还记得么? 反射
使用Code First建模自引用关系笔记 原文链接 一.Has方法: A.HasRequired(a => a.B); HasOptional:前者包含后者一个实例或者为null HasR ...
- (转)面试前必知Redis面试题—缓存雪崩+穿透+缓存与数据库双写一致问题
背景:redis问题在面试过程中经常被问到,对于常见问题一定不能放过. 面试前必知Redis面试题—缓存雪崩+穿透+缓存与数据库双写一致问题 一.缓存雪崩 1.1什么是缓存雪崩? 如果缓存数据设置的过 ...
- 跟我一起学Redis之Redis持久化必知必会
前言 Redis是出了名的速度快,那是因为在内存中进行数据存储和操作:如果仅仅是在内存中进行数据存储,那就会导致以下问题: 数据随进程退出而消失:当服务器断电或Redis Server进程退出时,内存 ...
随机推荐
- Angular5中提取公共组件之checkbox list
因为工作原因,需要使用到checkbox list多选项功能. 一直在尝试在checkbox组件中添加NgModel的属性,但是只能在单个checkbox复选框上使用,checkbox list就没办 ...
- [翻译] MJParallaxCollectionView
MJParallaxCollectionView https://github.com/mayuur/MJParallaxCollectionView This is a parallax for t ...
- Apache Jemeter 开发插件
为什么选择使用JMeter 当被问到这个问题的时候,也许你会在脑海里产生很多的理由,比如: Apache基金会下的开源项目,没有版权问题: 为数不多的还在持续更新的开源性能自动化测试工具: 支持协议丰 ...
- python内置模块(三)
hashlib模块 通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示). Python2中使用hashlib: import hashlib m = hashlib ...
- maven相关基础
0. 本文主要参考一下良心maven原创文摘: 0.0 maven官网传送门 http://maven.apache.org/ 0.1 maven日常 http://www.cnblogs.com/x ...
- 自定义控件(视图)2期笔记12:View的滑动冲突之 外部拦截法
1. 外部拦截法: 点击事件通过父容器拦截处理,如果父容器需要就拦截,不需要就不拦截. 这种方法比较符合事件分发机制.外部拦截法需要重写父容器的onInterceptTouchEvent方法,在内部做 ...
- python虚拟环境virtualenv高级篇
我曾经写过一篇virtualenv的博客:http://www.cnblogs.com/anpengapple/p/5907416.html 总体来讲还是适用的,不过稍微傻了一点.这一篇的内容有两个: ...
- BZOJ2761:[JLOI2011]不重复数字(map)
Description 给出N个数,要求把其中重复的去掉,只保留第一次出现的数. 例如,给出的数为1 2 18 3 3 19 2 3 6 5 4,其中2和3有重复,去除后的结果为1 2 18 3 19 ...
- java反序列化Commons-Collections5分析
BadAttributeValueException package org.lain.poc; import org.apache.commons.collections.Transformer; ...
- Sublime Text 3中设置不记住上次打开的文件
转自:https://blog.csdn.net/nicholaszao/article/details/79575251 在”User/Preferences.sublime-settings”配置 ...