Redis -- 羊哥CodeSheep20题(转发)
文章目录
- 1、什么是Redis,Redis有哪些特点?
- 特点1:丰富的数据类型
- 特点2:内存存储
- 特点3:持久化功能
- 2、Redis有哪些数据结构?
- 3、一个字符串类型的值能存储最大容量是多少?
- 4、能说一下Redis每种数据结构的使用场景吗?
- (1)String的使用场景
- (2)Hash的使用场景
- (3)List的使用场景
- (5)Sorted Set的使用场景
- 5、Redis如何做持久化的?能说一下RDB和AOF的实现原理吗?
- RDB持久化
- AOF持久化
- RDB和AOF的优缺点
- 6、讲解一下Redis的线程模型?
- 7、缓存雪崩、缓存穿透、缓存预热、缓存击穿、缓存降级的区别是什么?
- (1)缓存穿透
- (2)缓存击穿
- (3)缓存雪崩
- (4)缓存预热
- (5)缓存降级
- 8、Redis的内存淘汰机制
- (1)通过配置文件配置
- (2)通过动态命令配置
- 淘汰策略的分类
- LRU算法
- LFU算法
- 9、Redis有事务机制吗?
- 10、Redis事务到底是不是原子性的?
- 11、Redis为什么不支持回滚(roll back)?
- 12、Redis事务相关的命令有哪几个?
- 13、什么是Redis主从复制?
- 14、Sentinel(哨兵模式)的原理你能讲一下吗?
- 15、Cluster(集群)的原理你能讲一下吗?
- 16、Memcache与Redis的区别都有哪些?
- 17、假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如果将它们全部找出来?
- 18、如果这个redis正在给线上的业务提供服务,那使用keys指令会有什么问题?
- 19、如果有大量的key需要设置同一时间过期,一般需要注意什么?
- 20、Redis常用的客户端有哪些?
1、什么是Redis,Redis有哪些特点?
Redis全称为:Remote Dictionary Server(远程数据服务),Redis是一种支持key-value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。
特点1:丰富的数据类型
我们知道很多数据库只能处理一种数据结构:
- 传统SQL数据库处理二维关系数据;
- MemCached数据库,键和值都是字符串;
- 文档数据库(MongoDB)是由Json/Bson组成的文档。
当然不是他们这些数据库不好,而是一旦数据库提供数据结构不适合去做某件事情的话,程序写起来就非常麻烦和不自然。
Redis虽然也是键值对数据库,但是和Memcached不同的是:Redis的值不仅可以是字符串,它还可以是其他五中数据机构中的任意一种。通过选用不同的数据结构,用户可以使用Redis解决各种各样的问题,使用Redis,你碰到一个问题,首先会想到是选用那种数据结构把哪些功能问题解决掉,有了多样的数据结构,方便你解决问题。
特点2:内存存储
数据库有两种:一种是硬盘数据库,一种是内存数据库。
硬盘数据库是把值存储在硬盘上,在内存中就存储一下索引,当硬盘数据库想访问硬盘的值时,它先在内存里找到索引,然后再找值。问题在于,在读取和写入硬盘的时候,如果读写比较多的时候,它会把硬盘的IO功能堵死。
内存存储是讲所有的数据都存储在内存里面,数据读取和写入速度非常快。
特点3:持久化功能
将数据存储在内存里面的数据保存到硬盘中,保证数据安全,方便进行数据备份和恢复。
2、Redis有哪些数据结构?
Redis是key-value数据库,key的类型只能是String,但是value的数据类型就比较丰富了,主要包括五种:
- String
- Hash
- List
- Set
- Sorted Set
(1)String字符串
语法
SET KEY_NAME VALUE
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象。string类型是Redis最基本的数据类型,一个键最大能存储512MB。
(2)Hash哈希
语法
HSET KEY_NAME FIELD VALUE
Redis hash 是一个键值(key=>value)对集合。Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
(3)List列表
语法
//在 key 对应 list 的头部添加字符串元素
LPUSH KEY_NAME VALUE1.. VALUEN
//在 key 对应 list 的尾部添加字符串元素
RPUSH KEY_NAME VALUE1..VALUEN
//对应 list 中删除 count 个和 value 相同的元素
LREM KEY_NAME COUNT VALUE
//返回 key 对应 list 的长度
LLEN KEY_NAME
Redis 列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边)
(4)Set集合
语法
SADD KEY_NAME VALUE1...VALUEn
Redis的Set是string类型的无序集合。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
(5)Sorted Set有序集合
语法
ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。
redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
3、一个字符串类型的值能存储最大容量是多少?
查询官方文档(https://redis.io/topics/data-types)可以看到String类型的value值最多支持的长度为512M,所以正确的答案是512M。
4、能说一下Redis每种数据结构的使用场景吗?
(1)String的使用场景
字符串类型的使用场景:信息缓存、计数器、分布式锁等等。
常用命令:get/set/del/incr/decr/incrby/decrby
实战场景1:记录每一个用户的访问次数,或者记录每一个商品的浏览次数
方案:
常用键名:userid:pageview 或者 pageview:userid,如果一个用户的id为123,那对应的redis key就为pageview:123,value就为用户的访问次数,增加次数可以使用命令:incr。
使用理由:每一个用户访问次数或者商品浏览次数的修改是很频繁的,如果使用mysql这种文件系统频繁修改会造成mysql压力,效率也低。而使用redis的好处有二:使用内存,很快;单线程,所以无竞争,数据不会被改乱。
实战场景2:缓存频繁读取,但是不常修改的信息,如用户信息,视频信息
方案:
业务逻辑上:先从redis读取,有值就从redis读取,没有则从mysql读取,并写一份到redis中作为缓存,注意要设置过期时间。
键值设计上:
直接将用户一条mysql记录做序列化(通常序列化为json)作为值,userInfo:userid 作为key,键名如:userInfo:123,value存储对应用户信息的json串。如 key为:“user
Redis -- 羊哥CodeSheep20题(转发)相关推荐
- 垃圾小白羊leetcode刷题记录1
我的解法: def twoSum(self, nums: List[int], target: int) -> List[int]:for i, num in enumerate(nums):f ...
- Redis大厂面试20题
1.什么是Redis,Redis有哪些特点? 2.Redis有哪些数据结构? 3.一个字符串类型的值能存储最大容量是多少? 4.能说一下Redis每种数据结构的使用场景吗? 5.Redis如何做持久化 ...
- 【蓝桥杯】三羊献瑞-算法题JAVA解
题目: 观察下面的加法算式: 其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字. 请你填写"三羊献瑞"所代表的4位数字(答案唯一),不要填写任何多余内容. 分析: 直接暴力 ...
- 祺哥刷题日记(五)数楼梯
题目 P1255 数楼梯 题目描述 楼梯有 N N N 阶,上楼可以一步上一阶,也可以一步上二阶. 编一个程序,计算共有多少种不同的走法. 输入格式 一个数字,楼梯数. 输出格式 输出走的方式总数. ...
- 垃圾小白羊leetcode刷题记录3
我的解法: # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x ...
- 垃圾小白羊leetcode刷题记录2
我的解法: class Solution:def countAndSay(self, n: int) -> str:if n == 1:return "1"i = 1obj ...
- 「Redis开发与运维」读书笔记
第一章 初识Redis Redis的8个重要特性 速度快 内存存储数据 C语言实现 单线程架构,避免多线程竞争问题 Redis源码优化好 基于键值对的数据结构服务器 Redis 值可支持多种数据结构, ...
- Redis哨兵(sentinel)
Redis哨兵(sentinel) [目标] 掌握解决主从复制故障的解决方案 掌握哨兵监控的搭建 掌握哨兵监控机制及故障的自动转移 [理论知识] 哨兵监控架构设计 主观和客观下线 Leader选举流程 ...
- 50 个 Redis 必备知识:基础知识,架构、调优和监控知识及难点解决
本文包括:30 个 Redis 基础知识:10个 Redis 架构和运维必懂的知识:Redis 调优.监控知识和10个具体应用难点. 30 个 Redis 基础知识 1.Redis支持哪几种数据类型? ...
- 一网打尽Redis Lua脚本并发原子组合操作
1. 前言 Redis 是高性能的 KV 内存数据库,除了做缓存中间件的基本作用外还有很多用途,比如胖哥以前分享的Redis GEO 地理位置信息计算.Redis 提供了丰富的命令来供我们使用以实现一 ...
最新文章
- 长城电脑或收购夏新电子笔记本业务
- oracle适配器接口,Oracle
- 康奈尔ECE MEng项目拒信+1 哈哈哈
- 计算机二级python分值_计算机二级python考试难吗
- python leetcode_python实现leetcode中无重复字符的最长字串
- 协议(Protocol)与委托代理(Delegate)
- 20140418--第1讲.开山篇
- linux java mail 时间,Javamail在Windows上工作,而不是在Linux上
- 解决输出顺时针螺旋数组问题【寻路算法】
- Mac OS X 上用 otool 代替 ldd
- HTML渐变背景不重复,CSS背景渐变重复问题
- matlab has encountered,[万能解决问题]MATLAB has encountered an internal problem and needs to close....
- 微信安装旧版本方法(抓包必备)
- 怎么都2200年了,还有人不愿意交社保???
- Unity发布的exe程序正常 显示窗口右上角的放大缩小功能
- 剑走偏锋——老女人教你另类情人节攻略
- 【圣诞节限定】教你用Python画圣诞树,做个浪漫的程序员
- Python 内置模块tkinter —— 秒表计时器
- 已安装这个产品的两一个版本,无法下一步安装(0x80070666)
- Java 中j+=i 和 j=+i 的区别
热门文章
- 安科瑞电气系统Acrel-2000在数据中心机房的应用及产品选型
- ArcGIS地图制图教程——超详细
- 调试经验——用XML格式定义Excel (.xls格式)文件 (XML Spreadsheet format in Excel)
- vscode调整代码大小
- linux内核网络协议栈学习笔记:关于GRO/GSO/LRO/TSO等patch的分析和测试
- LRO -- skb_buff->frags[] skb_buff->frag_list
- 文件夹压缩为war包
- ffmpeg加马赛克
- 树莓派4B无显示屏系统安装(Raspbian)
- biosrecovery什么意思_卡刷和线刷手机什么意思 Recovery使用方法