文章目录

  • 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题(转发)相关推荐

  1. 垃圾小白羊leetcode刷题记录1

    我的解法: def twoSum(self, nums: List[int], target: int) -> List[int]:for i, num in enumerate(nums):f ...

  2. Redis大厂面试20题

    1.什么是Redis,Redis有哪些特点? 2.Redis有哪些数据结构? 3.一个字符串类型的值能存储最大容量是多少? 4.能说一下Redis每种数据结构的使用场景吗? 5.Redis如何做持久化 ...

  3. 【蓝桥杯】三羊献瑞-算法题JAVA解

    题目: 观察下面的加法算式: 其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字. 请你填写"三羊献瑞"所代表的4位数字(答案唯一),不要填写任何多余内容. 分析: 直接暴力 ...

  4. 祺哥刷题日记(五)数楼梯

    题目 P1255 数楼梯 题目描述 楼梯有 N N N 阶,上楼可以一步上一阶,也可以一步上二阶. 编一个程序,计算共有多少种不同的走法. 输入格式 一个数字,楼梯数. 输出格式 输出走的方式总数. ...

  5. 垃圾小白羊leetcode刷题记录3

    我的解法: # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x ...

  6. 垃圾小白羊leetcode刷题记录2

    我的解法: class Solution:def countAndSay(self, n: int) -> str:if n == 1:return "1"i = 1obj ...

  7. 「Redis开发与运维」读书笔记

    第一章 初识Redis Redis的8个重要特性 速度快 内存存储数据 C语言实现 单线程架构,避免多线程竞争问题 Redis源码优化好 基于键值对的数据结构服务器 Redis 值可支持多种数据结构, ...

  8. Redis哨兵(sentinel)

    Redis哨兵(sentinel) [目标] 掌握解决主从复制故障的解决方案 掌握哨兵监控的搭建 掌握哨兵监控机制及故障的自动转移 [理论知识] 哨兵监控架构设计 主观和客观下线 Leader选举流程 ...

  9. 50 个 Redis 必备知识:基础知识,架构、调优和监控知识及难点解决

    本文包括:30 个 Redis 基础知识:10个 Redis 架构和运维必懂的知识:Redis 调优.监控知识和10个具体应用难点. 30 个 Redis 基础知识 1.Redis支持哪几种数据类型? ...

  10. 一网打尽Redis Lua脚本并发原子组合操作

    1. 前言 Redis 是高性能的 KV 内存数据库,除了做缓存中间件的基本作用外还有很多用途,比如胖哥以前分享的Redis GEO 地理位置信息计算.Redis 提供了丰富的命令来供我们使用以实现一 ...

最新文章

  1. 长城电脑或收购夏新电子笔记本业务
  2. oracle适配器接口,Oracle
  3. 康奈尔ECE MEng项目拒信+1 哈哈哈
  4. 计算机二级python分值_计算机二级python考试难吗
  5. python leetcode_python实现leetcode中无重复字符的最长字串
  6. 协议(Protocol)与委托代理(Delegate)
  7. 20140418--第1讲.开山篇
  8. linux java mail 时间,Javamail在Windows上工作,而不是在Linux上
  9. 解决输出顺时针螺旋数组问题【寻路算法】
  10. Mac OS X 上用 otool 代替 ldd
  11. HTML渐变背景不重复,CSS背景渐变重复问题
  12. matlab has encountered,[万能解决问题]MATLAB has encountered an internal problem and needs to close....
  13. 微信安装旧版本方法(抓包必备)
  14. 怎么都2200年了,还有人不愿意交社保???
  15. Unity发布的exe程序正常 显示窗口右上角的放大缩小功能
  16. 剑走偏锋——老女人教你另类情人节攻略
  17. 【圣诞节限定】教你用Python画圣诞树,做个浪漫的程序员
  18. Python 内置模块tkinter —— 秒表计时器
  19. 已安装这个产品的两一个版本,无法下一步安装(0x80070666)
  20. Java 中j+=i 和 j=+i 的区别

热门文章

  1. 安科瑞电气系统Acrel-2000在数据中心机房的应用及产品选型
  2. ArcGIS地图制图教程——超详细
  3. 调试经验——用XML格式定义Excel (.xls格式)文件 (XML Spreadsheet format in Excel)
  4. vscode调整代码大小
  5. linux内核网络协议栈学习笔记:关于GRO/GSO/LRO/TSO等patch的分析和测试
  6. LRO -- skb_buff->frags[] skb_buff->frag_list
  7. 文件夹压缩为war包
  8. ffmpeg加马赛克
  9. 树莓派4B无显示屏系统安装(Raspbian)
  10. biosrecovery什么意思_卡刷和线刷手机什么意思 Recovery使用方法