年终Redis总结:数据结构+持久化+事务;附《深入理解Redis》+面试题

2022年Redis最新面试题 2022年Redis最新面试题 一、Redis基础知识1、什么是 Redis, 有哪些优缺点?2、Redis 最适合的场景, 可以简单的说说吗?3、Redis 相比 Memcached 有哪些优势?4、一个字符串类型的值能存储最大容量是多少?5、Redis 读写分离6、你知道怎么用Redis实现实现分布式锁?二、数据结构1、Redis的数据类型有哪些?2、Hash如何实现O(1)的查询和设置速度, 以及扩容原理3、说说 Redis 哈希槽的概念?4、布隆过滤器三、事务1、怎么理解 Redis 事务?2、Re 阅读详情

本文转载自:年终Redis总结:数据结构+持久化+事务;附<深入理解Redis>+面试题


一. Redis 简介

Redis 是一个速度非常快的非关系型数据库(non-relational database)/ NoSQL 数据库。

Redis 不使用表,也不会预定义或者强制去要求用户对 Redis 存储不同的数据进行关联。

Redis 为什么速度非常快?

  • 纯内存操作:数据存在内存中,类似于 HashMap。HashMap 的优势就是查找和操作的时间复杂度都是 O(1)
  • 数据结构简单:不仅数据结构简单,而且对数据操作也简单
  • 单线程:避免了频繁的上下文切换,也不存在多进程或者多线程导致的切换而消耗 CPU 资源,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗

二. Redis 数据结构

Redis 存储键(key)和 5 种不同类型的值(value)之间的映射。这 5 中类型分别为:

STRING(字符串)、LIST(列表)、HASH(散列)、SET(集合)和 ZSET(有序集合)。

1. STRING(字符串)

字符串示例,键为 hello,值为 world:

①. 字符串命令:

②. 使用

127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> del hello
(integer) 1
127.0.0.1:6379> get hello
(nil)
127.0.0.1:6379> set num 1
OK
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> get num
"2"

2. LIST(列表)

list-key 是一个包含 3 个元素的列表键,列表中的元素是可以重复的:

①. 列表命令

②. 使用

127.0.0.1:6379> rpush list-key item
(integer) 1
127.0.0.1:6379> rpush list-key item2
(integer) 2
127.0.0.1:6379> rpush list-key item
(integer) 3 # 返回的列表长度
127.0.0.1:6379> lrange list-key 0 -1
1) "item"
2) "item2"
3) "item"
# 使用 0 为范围的开始索引,-1 为范围索引的结束索引,可以去除列表包含的所有元素
127.0.0.1:6379> lindex list-key 1
"item2"
127.0.0.1:6379> lpop list-key
"item"
127.0.0.1:6379> lrange list-key 0 -1
1) "item2"
2) "item"

3. HASH(散列)

hash-key 是一个包含两个键值对的散列键:

①. 散列命令

②. 使用

127.0.0.1:6379> hset hash-key sub-key1 value1
(integer) 1
127.0.0.1:6379> hset hash-key sub-key2 value2
(integer) 1
127.0.0.1:6379> hset hash-key sub-key1 value2
(integer) 0
127.0.0.1:6379> hgetall hash-key
1) "sub-key1"
2) "value2"
3) "sub-key2"
4) "value2"
127.0.0.1:6379> hdel hash-key sub-key2
(integer) 1
127.0.0.1:6379> hdel hash-key sub-key2
(integer) 0
127.0.0.1:6379> hget hash-key sub-key1
"value2"
127.0.0.1:6379> hgetall hash-key
1) "sub-key1"
2) "value2"

4. SET(集合)

set-key 是一个包含 3 个元素的集合键:

①. 集合命令

②. 使用

127.0.0.1:6379> sadd set-key item
(integer) 1
127.0.0.1:6379> sadd set-key item2
(integer) 1
127.0.0.1:6379> sadd set-key item3
(integer) 1
127.0.0.1:6379> sadd set-key item
(integer) 0
127.0.0.1:6379> smembers set-key
1) "item"
2) "item3"
3) "item2"
127.0.0.1:6379> sismember set-key item4
(integer) 0
127.0.0.1:6379> sismember set-key item
(integer) 1
127.0.0.1:6379> srem set-key item
(integer) 1
127.0.0.1:6379> srem set-key item
(integer) 0
127.0.0.1:6379> smembers set-key
1) "item3"
2) "item2"

5. ZSET(有序集合)

zset-key 是已一个包含 2 个元素的有序集合键:

①. 有序集合命令:

②. 使用

127.0.0.1:6379> zadd zset-key 728 member1
(integer) 1
127.0.0.1:6379> zadd zset-key 982 member2
(integer) 1
127.0.0.1:6379> zadd zset-key 982 member2
(integer) 0
127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member1"
2) "728"
3) "member2"
4) "982"
127.0.0.1:6379> zrangebyscore zset-key 0 800 withscores
1) "member1"
2) "728"
127.0.0.1:6379> zrem zset-key member1
(integer) 1
127.0.0.1:6379> zrem zset-key member1
(integer) 0
127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member2"
2) "982"

三. Redis 与 Memcached

两者都是非关系型内存键值数据库,主要有以下不同:

1. 数据类型

  • Redis 支持五种不同的数据类型,可以更灵活地解决问题
  • Memcached 仅支持字符串类型

2. 数据持久化

  • Redis 支持两种持久化策略:RDB 快照和 AOF 日志
  • Memcached 不支持持久化。

3. 分布式

  1. Redis Cluster 实现了分布式的支持
  2. Memcached 不支持分布式,只能通过在客户端使用一致性哈希来实现分布式存储,这种方式在存储和查询时都需要先在客户端计算一次数据所在的节点。

4. 内存管理机制

  • 在 Redis 中,并不是所有数据都一直存储在内存中,可以将一些很久没用的 value 交换到磁盘,而 Memcached 的数据则会一直在内存中。
  • Memcached 将内存分割成特定长度的块来存储数据,以完全解决内存碎片的问题。但是这种方式会使得内存的利用率不高,例如块的大小为 128 bytes,只存储 100 bytes 的数据,那么剩下的 28 bytes 就浪费掉了。

5. 线程模型

  • Redis 使用单线程的多路 IO 复用模型
  • Memcached 是多线程,非阻塞IO复用的网络模型

四. Redis持久化

Redis 是内存型数据库,为了保证数据断电后不丢失,需要将内存中的数据持久化到磁盘上;另一方面,保存中间结果,不必重新计算。

持久化有 2 种:

  • 快照持久化:将存在某一时刻的所有数据都写入磁盘中
  • AOF 持久化:在执行写命令时,将被执行的写命令复制到文件中

Redis 提供的持久化配置选项:

# 快照持久化
save 60 1000
stop-writes-on-bgsave-error yes
rdbcompression no

# AOF 持久化
appendonly yes
appendfsync always # 同步选项
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# 共享选项,决定了快照文件和 AOF 文件的保存位置
dir ./

1. 快照持久化

快照持久化是通过创建快照来获得 Redis 存储在内存中数据在某个时间点上的副本。在创建快照后,用户可对快照备份,可将快照留在原地以便重启 Redis 时使用。

①. 快照持久化配置

save 60 10000        
# 在60秒(1分钟)之后,如果至少有10000个键发生变化,Redis 就会自动触发 BGSAVE 命令创建快照。

stop-writes-on-bgsave-error yes 
# 表示备份进程出错的时候,主进程就停止接收新的写入操作,是为了保护持久化数据的一致性。

rdbcompression no
# RDB 的压缩设置为 no,因为压缩会占用更多的 CPU 资源。

②. 创建快照的方法

  • BGAVSE 命令:客户端向 Redis 发送 BGSAVE 命令来创建一个快照。对于支持 BGSAVE 命令的平台来说(基本上所有平台支持,除了Windows平台),Redis 会调用 fork 来创建一个子进程,然后子进程负责将快照写入硬盘,而主进程则继续处理命令请求。
  • 用户设置 save 配置选项
save 60 10000
# 从 redis 最近一次创建快照之后算起,满足 “60 s 内 10000 次写入”,Redis 会自动触发 BGSAVE 命令

③. 存在的问题

  • 如果系统发生故障,将会丢失最近一次创建快照之后的数据
  • 如果数据量很大,保存快照的时间会很长

2. AOF 持久化

AOF 持久化将被执行的写命令写到 AOF 文件末尾,记录数据发生的变化。Redis 值要从头到尾重新执行一次 AOF

文件包含的所有写命令,就可恢复 AOF 文件所记录的数据。

默认情况下,Redis 没有开启 AOF(append only file)方式的持久化,可以通过 appendonly 参数开启:

appendonly yes

①. 快照持久化配置

appendonly yes

appendfsync always # 同步选项

auto-aof-rewrite-percentage 100
    
auto-aof-rewrite-min-size 64mb

②. 同步选项

使用 AOF 持久化需要设置同步选项,从而确保写命令什么时候会同步到磁盘文件上。

3. 重写 / 压缩 AOF 文件

AOF 持久化存在的问题:

  • 随着 Redis 不断运行,AOF 文件的体积会不断增长,占用更多的磁盘空间
  • 若 AOF 文件体积非常大,则恢复的时间可能会比较长

为了解决 AOF 文件不断增大的问题,我们采用重写 / 压缩 AOF 文件的方式:

用户 Redis 发送 BGREWRITEAOF 命令,通过移除 AOF 文件中冗余命令来重写 AOF 文件来减小 AOF 文件的体积。

(新的 AOF 文件和原有的 AOF 文件所保存的数据状态是一致的,但是体积更小)。

BGREWRITEAOF 原理:

Redis 维护 AOF 重写缓冲区和 AOF 缓冲区。子进程创建新的 AOF 文件期间,记录服务器执行的所有写命令会同时写入 2 个缓冲区中,使得新旧两个 AOF 文件中所保存的数据状态一致。

4. 对比

5. 优化

Redis 4.0 以后将快照和 AOF 混合持久化(默认关闭,使用 aof-user-rdb-preamble开启),AOF 重写时将快照写入 AOF 文件开头。

这样做的好处是可以结合 RDB 和 AOF 的优点, 快速加载同时避免丢失过多的数据,当然缺点也是有的, AOF 里面的 RDB 部分是压缩格式不再是 AOF 格式,可读性较差。

五. Redis事务

1. 命令

  • MULTI命令:将客户端从非事务状态切换到事务状态,标志着事务的开始。
  • EXEC命令:客户端向服务端发送该命令后,服务器会遍历这个客户端的事务队列,并将所有命令的执行结果返回给客户端。
  • WATCH命令:乐观锁,可以在EXEC命令执行之前,监视任意数量的数据库键,并在EXEC命令执行的时候,检查被监视的键是否至少有一个已经被修改过了,如果有,服务器将拒绝执行该事务,并向客户端返回代表事务执行失败的空回复。

2. 简述

Redis 通过 MULTI、EXEC、WATCH 等命令来实现事务功能。

事务提供了一种将多个命令请求打包,然后一次性、按顺序地执行多个命令的机制。服务器在执行事务期间,不会改去执行其它客户端的命令请求,它会将事务中的所有命令都执行完毕,然后才去处理其他客户端的命令请求。

事务中的多个命令被一次性发送给服务器,而不是一条一条发送,这种方式被称为pipeline。

注意:

  • Redis 最简单的事务实现方式是使用 MULTI 和 EXEC 命令将事务操作包围起来。
  • 使用 pineline 的好处:Redis 使用的是客户端 / 服务器(C/S)模型和请求/响应协议的 TCP 服务器。Redis 客户端与 Redis 服务器之间使用 TCP 协议进行连接,一个客户端可以通过一个 Socket 连接发起多个请求命令。每个请求命令发出后客户端通常会阻塞并等待 Redis 服务器处理,Redis 处理完请求命令后会将结果通过响应报文返回给客户端,因此当执行多条命令的时候都需要等待上一条命令执行完毕才能执行。
  • pipeline 可以一次性发送多条命令并在执行完后一次性将结果返回,可以减少客户端与服务器之间的网络通信次数从而提升性能,并且 pineline 基于队列,而队列的特点是先进先出,这样就保证数据的顺序性。
  • Redis 的事务和传统关系型数据库事务的最大区别在于,Redis 不支持事务回滚机制(rollback),即使事务队列中的某个命令在执行期间出现了错误,整个事务也会继续执行下去,直到将事务队列中的所有命令都执行完毕为止。因为其作者认为,Redis 事务执行时错误通常都是编程错误产生的,这种错误通常只会出现在开发环境中,而很少会在实际的生产环境中出现,所以他任务没有必要开发 Redis 的回滚功能。

六. 深入理解Redis

  1. 为何选择Redis?
  2. 高级键管理与数据结构
  3. 内存管理的建议与技巧
  4. Redis编程第一.部分: Redis 核心、客户端和编程语言
  5. Redis编程第二部分: Lua 脚本、管理与DevOps
  6. 可伸缩性: Redis 集群和Sentinel
  7. Redis与互补的NoSQL技术
  8. Docker容器与云端部署
  9. 任务管理与消息队列
  10. 信息流的测量与管理

七. Redis面试题

1. 什么是Redis?简述它的优缺点?

Redis的全称是:Remote Dictionary.Server,本质上是一个Key-Value类型的内存数据库,很像 memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘 上进行保存。

因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的 Key-Value DB。

Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限 制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能。

比方说用他的List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,用他的Set可以做高 性能的tag系统等等。

另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一 个功能加强版的 memcached来用。 Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能 读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。

2. Redis与memcached相比有哪些优势?

  • memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型
  • redis的速度比memcached快很多redis的速度比memcached快很多
  • redis可以持久化其数据redis可以持久化其数据

3. Redis支持哪几种数据类型?

String、List、Set、Sorted Set、hashes

4. Redis主要消耗什么物理资源?

内存。

5. Redis有哪几种数据淘汰策略?

  • noeviction:返回错误当内存限制达到,并且客户端尝试执行会让更多内存被使用的命令。
  • allkeys-lru: 尝试回收最少使用的键(LRU),使得新添加的数据有空间存放。
  • volatile-lru: 尝试回收最少使用的键(LRU),但仅限于在过期集合的键,使得新添加的数据有空间存 放。
  • allkeys-random: 回收随机的键使得新添加的数据有空间存放。
  • volatile-random: 回收随机的键使得新添加的数据有空间存放,但仅限于在过期集合的键。
  • volatile-ttl: 回收在过期集合的键,并且优先回收存活时间(TTL)较短的键,使得新添加的数据有空间 存放。

6. Redis官方为什么不提供Windows版本?

因为目前Linux版本已经相当稳定,而且用户量很大,无需开发windows版本,反而会带来兼容性等问 题。

7. 一个字符串类型的值能存储最大容量是多少?

512M

8. 为什么Redis需要把所有数据放到内存中?

Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。 所以redis具有快速和数据持久化的特征,如果不将数据放在内存中,磁盘I/O速度为严重影响redis的 性能。 在内存越来越便宜的今天,redis将会越来越受欢迎, 如果设置了最大使用的内存,则数据已有记录数达 到内存限值后不能继续插入新值。

9. Redis集群方案应该怎么做?都有哪些方案?

  • codis
  • 目前用的最多的集群方案,基本和twemproxy一致的效果,但它支持在节点数量改变情况下,旧节点 数据可恢复到新hash节点。 redis cluster3.0自带的集群,特点在于他的分布式算法不是一致性hash,而是hash槽的概念,以及自 身支持节点设置从节点。具体看官方文档介绍。
  • 在业务代码层实现,起几个毫无关联的redis实例,在代码层,对key进行hash计算,然后去对应的 redis实例操作数据。这种方式对hash层代码要求比较高,考虑部分包括,节点失效后的替代算法方 案,数据震荡后的自动脚本恢复,实例的监控,等等。

10. Redis集群方案什么情况下会导致整个集群不可用?

有A,B,C三个节点的集群,在没有复制模型的情况下,如果节点B失败了,那么整个集群就会以为缺少 5501-11000这个范围的槽而不可用。

11. Redis有哪些适合的场景?

  • 会话缓存(Session Cache):最常用的一种使用Redis的情景是会话缓存(sessioncache),用Redis缓存会话比其他存储(如 Memcached)的优势在于:Redis提供持久化。当维护一个不是严格要求一致性的缓存时,如果用户的 购物车信息全部丢失,大部分人都会不高兴的,现在,他们还会这样吗? 幸运的是,随着 Redis 这些年的改进,很容易找到怎么恰当的使用Redis来缓存会话的文档。甚至广为 人知的商业平台Magento也提供Redis的插件。
  • 全页缓存(FPC):除基本的会话token之外,Redis还提供很简便的FPC平台。回到一致性问题,即使重启了Redis实 例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,类似PHP本地 FPC。 再次以Magento为例,Magento提供一个插件来使用Redis作为全页缓存后端。 此外,对WordPress的用户来说,Pantheon有一个非常好的插件wp-redis,这个插件能帮助你以最快 速度加载你曾浏览过的页面。
  • 队列:Reids在内存存储引擎领域的一大优点是提供list和set操作,这使得Redis能作为一个很好的消息队列 平台来使用。Redis作为队列使用的操作,就类似于本地程序语言(如Python)对 list 的 push/pop 操作。 如果你快速的在Google中搜索“Redis queues”,你马上就能找到大量的开源项目,这些项目的目的 就是利用Redis创建非常好的后端工具,以满足各种队列需求。例如,Celery有一个后台就是使用 Redis作为broker,你可以从这里去查看。
  • 排行榜/计数器:Redis在内存中对数字进行递增或递减的操作实现的非常好。集合(Set)和有序集合(SortedSet)也使 得我们在执行这些操作的时候变的非常简单,Redis只是正好提供了这两种数据结构。 所以,我们要从排序集合中获取到排名最靠前的10个用户–我们称之为“user_scores”,我们只需要像 下面一样执行即可: 当然,这是假定你是根据你用户的分数做递增的排序。如果你想返回用户及用户的分数,你需要这样执 行: ZRANGE user_scores 0 10 WITHSCORES Agora Games就是一个很好的例子,用Ruby实现的,它的排行榜就是使用Redis来存储数据的,你可 以在这里看到。
  • 发布/订阅: 最后(但肯定不是最不重要的)是Redis的发布/订阅功能。发布/订阅的使用场景确实非常多。我已看见 人们在社交网络连接中使用,还可作为基于发布/订阅的脚本触发器,甚至用Redis的发布/订阅功能来建 立聊天系统!

本文转载自:年终Redis总结:数据结构+持久化+事务;附<深入理解Redis>+面试题

redis面试必备的十大面试题 文章目录前言1.Redis的高并发和快速原因?你为什么选择redis?Redis跟其他缓存相比,优势在哪里?2.redis为什么是单线程的?3.Redis的单线程的优劣性?4.Redis中的数据类型有哪些?5.跳表的原理是什么?6.Redis相关命令7.持久化方式有哪些?有什么区别?8.你了解Redis事务机制吗?9.什么是悲观锁?什么是乐观锁?10.主从复制的原理:11.主从复制的三种方式12.什么是哨兵机制?哨兵机制的工作原理是什么?13.知道什么是热key吗?热key问题怎么解决?14.什么是缓存击穿 阅读详情

相关推荐

凭借这份Redis面试题,我成功拿下了京东,美团的offer

1.Redis是什么? Redis是一个开放源代码(BSD许可)的内存中数据结构存储,可用作数据库,缓存和消息代理,是一个基于键值对的NoSQl数据库。 2.Redis特性? 速度快 基于键值对的数据结构服务器 丰富的功能、丰富的数据结构 简单稳定 客户端语言多 持久化 主从复制 高可以 & 分布式 3.Redis合适的应用场景? 缓存 排行榜 计数器 分布式会话 分布式锁 社交网络 最新列表 消息系统 4.除了Redis你还知道哪些NoSQL数据库? MongoDB、MemcacheDB、Cass

欢迎您访问我的公众号【前程有光】 1652

redis基础(6.0)数据结构、事务、常用组件等

介绍总结redis6.0应用场景,安装、基本数据结构、发布订阅、事务、stream、Lua脚本等

small_to_large的博客 1177

面试几率最高的35个Redis面试题总结

前言: 这篇文章主要介绍了面试时提问几率最高的35个Redis面试题总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 1.什么是redis? Redis 是一个基于内存的高性能key-value数据库。 2.Reids的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。 因为是纯内存操作,Redis

banzhuanhu的博客 1273

深入理解MySQL索引的数据结构和事务的四大特性、隔离性的四种级别

1. `read umcommitted`:不做任何限制,事务之间随意并发执行,并发程度高,隔离性最低,会产生脏读、不可重复读、幻读。 2. `read committed`:对写操作加锁,并发程度降低,隔离性提高,解决脏读,仍存在 不可重复读、幻读。 3. `repeatable read` :对读写都加锁,并发程度再次降低,隔离性再次提高,解决 脏读、不可重读,可能存在幻读。 4. `serializable` : 严格串行化,并发程度最低【串行执行】,隔离性最高,解决 脏读、不可重复读、幻读。执行速

Original0的博客 778

Redis高频面试题50道(二)

Redis集群采用异步复制的方式,主节点负责接收写操作,并将变更异步地推送给从节点。这种方式保证了即使部分节点间通信延迟或失败,集群仍能继续提供服务。

阿木木AEcru的博客 1087

Redis 性能优化的高频面试题及答案

可以根据业务需求,选择 RDB 和 AOF 的组合策略,同时调整 AOF 的重写策略,以减少文件的大小,优化性能。此外,通过设置 AOF 的重写策略,可以优化 AOF 文件的大小,减小对性能的影响。在使用分片策略时,应定期监控节点的负载情况,适时调整哈希槽分配,确保 Redis 集群的高效运行。选择合适的数据结构可以显著提高性能。在高并发场景下,监控 Redis 的连接使用情况,并根据需求进行动态调整,可以确保系统的稳定性和可用性。此外,监控订阅客户端的连接情况,可以及时调整策略,确保系统的稳定性和性能。

闲人编程的博客 1466

史上最全Redis面试49题(含答案):哨兵+复制+事务+集群+持久化等

继续最全Java面试答案系列篇,已经持续的更新了最全mysql、spring、多线程等面试答案。本文篇幅过长,建议收藏后慢慢细看,希望能对你的面试之旅有所帮助! 文末有该最全系列答案获取方式哦~ Redis支持哪几种数据类型?支持多种类型的数据结构1.string:最基本的数据类型,二进制安全的字符串,最大512M。2.list:按照添加...

weixin_33890526的博客 2万+

【面试宝典】Java八股文之Redis面试题

2022年接近年底了,相信绝大多数小伙伴们跳操的心已经蠢蠢欲动了,今天给大家吐血整理了Java领域各个知识点的面试题,把碎片的知识,系统化的整理,有代码有讲解,通俗易懂,最重要的好记!!!希望能够为小伙伴们的面试保驾护航,争取拿到自己期望的薪资。如果对你有用,请点赞关注收藏哦~

热爱技术,享受生活 1371

Redis-库之数据结构

一、简介 Redis数据库里边的每一个键值对(key-value pair)都是由对象构成。其中,数据库键总是一个字符串对象(sting object),而值则可能是字符串(string objec)、哈希对象(hash object)、列表对象(list object)、集合对象(set object)、有序集合(sorted set object)的其中一种。 这些键值对象,都是由底层re...

l_dongyang的博客 581

深入理解Redis:50个高频面试题解析

Redis(Remote Dictionary Server)是一个开源的、基于内存的高性能键值存储数据库系统。它支持多种类型的数据结构,如字符串(strings)、链表(lists)、集合(sets)、有序集合(sorted sets)、哈希表(hashes)、位图(bitmaps)、超日志(hyperloglogs)以及地理空间索引(geospatial indexes)。Redis以其出色的性能和丰富的数据结构受到了广大开发者的青睐,常被用于构建各种缓存系统。

weixin_36235398的博客 1012

【STM32H7实战】SDMMC总线优化与FatFs文件系统高效读写技巧

本文详细介绍了STM32H7中SDMMC总线优化与FatFs文件系统高效读写技巧,包括时钟配置、DMA传输、缓存策略等关键优化点。通过实测数据对比,展示了从2.7MB/s提升至11.8MB/s读取速度的优化效果,适用于需要高性能SD卡读写的嵌入式开发场景。

e6f7g8h9i的博客 483

Redis 从入门到精通:redis的数据结构、redis指令大全、SpringBoot整合redis、redis面试问题详解

目录 一、Redis基础简介 1、Redis官方介绍 2、redis的数据结构及应用场景 2.1数据结构 2.2应用场景 二、redis在Linux中的操作 1、常规操作 2、redis的指令 2.1 value为String类型 2.2 value为hash类型 2.3 value为list类型 2.4value为set类型 2.5value为zs...

方才coding 3511

简单的服务器取证

记一次入门服务器取证——药品直销网,涵盖旧版本宝塔、静态IP的配置更改、代码的理解

m0_74559567的博客 3756

【Redis】Redis 经典面试题解析:深入理解 Redis 的核心概念与应用

Redis 是一个功能强大且灵活的工具,掌握其核心概念和应用场景对于面试和实际开发都非常重要。本文涵盖了 Redis 的经典面试题,包括数据结构、持久化、高可用性、缓存淘汰策略、分布式锁等内容。希望这些解析能帮助读者更好地理解 Redis,并在面试中脱颖而出!如果你对 Redis 的其他问题感兴趣,欢迎在评论区留言讨论!

Ape's IT Blog 1455

生信入门(六)——单细胞分析(Seurat)

生信入门(六)——单细胞分析(Seurat) 文章目录生信入门(六)——单细胞分析(Seurat)一、数据导入1、数据来源2、数据导入二、标准预处理1、QC和选择细胞进行进一步分析2、规范化数据3、识别高度可变的特征(特征选择)4、缩放数据三、主成分分析(PCA)1、线性降维2、确定数据集的“维度”四、聚类细胞五、非线性降维(UMAP/tSNE)六、寻找差异表达的特征(簇生物标志物) 一、数据导入 1、数据来源 点击此处下载数据 数据说明:分析10X Genomics提供的外周血单细胞(PBMC)数据集,有

羊羊的博客 6万+

深入解析MTK平台hang_detect机制:从原理到实战调试

本文深入解析了MTK平台hang_detect机制的工作原理与实战调试技巧。作为系统健康监测的核心机制,hang_detect通过多层级监控体系检测应用层和内核层异常,结合Kernel_exception等日志信息快速定位问题。文章详细介绍了典型问题案例、调试方法及预防措施,帮助开发者提升MTK平台系统稳定性调试能力。

purple的博客 1004

Redis面试题学习心得:53道八股文背后的核心知识体系解析

《Redis面试题学习心得:53道八股文背后的核心知识体系解析》一文通过分析一份包含53道Redis面试题的文档,深入探讨了Redis的核心知识点。文章从基础概念、数据结构、持久化与高可用、性能优化等方面拆解了Redis的核心考点,并提供了学习方法和面试应答策略。作者强调,学习Redis不应仅停留在背题层面,而应通过理解原理、实践验证和场景适配,将知识转化为解决实际问题的能力。文章适合面试候选人、初级开发者及技术负责人参考,帮助他们在面试和技术成长中更好地掌握Redis的应用与优化。

冰蓝世界的博客 2013

osgPython

osgPython是一组 Python 模块,为 OpenSceneGraph 的 C++ 库提供了完整的 Python 接口。这意味着你可以在 Python 中调用几乎所有的 OSG 功能,从创建简单的场景到复杂的渲染效果。核心优势开发速度快:Python 语法简洁,无需编译,快速迭代易于学习:比 C++ 更易上手,适合原型开发和教学生态丰富:可以结合 NumPy、Matplotlib 等科学计算库跨平台:与 OSG 一样支持 Windows、Linux、macOS性能考虑。

深之JohnChen的专栏 453

2019整理最全的50道Redis面试题

018整理最全的50道Redis面试题 1、什么是Redis? Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。 Redis的出色之处不仅仅是性能...

geomon的博客 3239

手把手教你学Simulink--复杂环境适应的四足机器人领域仿真建模实例:构建一个基于Simulink的四足机器人动态平衡保持仿真模型

通过上述步骤,你可以构建一个基本的基于Simulink的四足机器人动态平衡保持仿真模型。此模型不仅有助于理解四足机器人在复杂环境中的动态平衡控制原理,也为进一步优化提供了基础。随着技术的发展,还可以探索更多高级功能,如自适应步态调整、强化学习等,以提高机器人的智能性和适应性。

MHD0815的博客 235

YOLOv8改进策略【卷积层】| CVPR-2023 部分卷积 PConv 轻量化卷积,降低内存占用

本文记录的是利用优化的目标检测方法研究。深度可分离卷积可以减少FLOPs,但会导致更高的内存访问,引起延迟并减慢整体计算。部分卷积利用逐点卷积处理通道冗余,减少模型计算量和内存访问量。Run, Don’t Walk: Chasing Higher FLOPS for Faster Neural Networks及其改进的实现代码如下: 四、创新模块 4.1 改进点⭐ 模块改进方法:直接加入(第五节讲解添加步骤)。模块加入如下:模块改进方法:基于的(第五节讲解添加步骤)。第二种改进方法是对中的进行改进,并将

Limiiiing的博客 1015

redis 必须掌握的面试题

Redis 的数据淘汰策略包括:noeviction(不淘汰数据)、volatile-lru(在设置了过期时间的键中,选择最近最少使用的键进行淘汰)、volatile-ttl(在设置了过期时间的键中,选择剩余时间最短的键进行淘汰)、volatile-random(在设置了过期时间的键中,随机选择键进行淘汰)和 allkeys-lru(从所有键中选择最近最少使用的键进行淘汰)等。ACL 允许细粒度的权限控制,可以限制命令的执行、键的访问和操作等,以保护 Redis 数据的安全性。

weixin_39439156的博客 857

用Virtuoso和Abstract完成gds2lef

需要用到的工具有virtuoso和abstract。 数模混合的项目通常需要模拟完成模块设计,把接去数字的pin打上label(text),数字的floorplan才能正式开始。 如果只需要简单的数字PR boundary和pin点位置,那么只使用virtuoso就够了,还想把模拟版图都转成lef就要用到abstract工具。 1.PR boundary+pin 1)在virtuoso中打开layout a) Gui操作: Create->P&R Objects->

m0_61544122的博客 8742

高级:Redis 面试题精讲

Redis作为高性能的键值存储数据库,在现代软件开发中具有广泛的应用。通过本文的学习,读者可以深入理解Redis的核心概念、持久化机制、主从复制、高可用与集群架构以及性能优化方法,并通过实际案例掌握其应用。在实际开发中,合理运用Redis可以显著提升系统的性能和可扩展性。

佩奇的技术笔记 889

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Redis高频面试题

Redis,全称:Remote Dictionary Server,是一个基于内存的高性能key-value数据库,是应用服务提高效率和性能必不可少的一部分,因为当前大部分的应用都离不开Redis,所以学习并熟练Redis操作已经成为一个必不可少的技能。当然,面试中,Redis也深受面试官喜爱,下面就为大家整理汇总Redis的高频面试题,希望能给乡亲们一点帮助。 1、什么是 Redis?简述它的优...

qq_41490913的博客 1249

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Redis 八股文面试题

要真正掌握 Redis,不能只零散记忆命令或知识点,而需从单点出发,梳理清楚知识点间的关联,构建完整知识网络。下面就从 Redis 的核心优势切入,带大家由点及面认识 Redis 各知识点的联系。

kot_boring的博客 759

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: 不想进BAT的Java程序员不是好程序员,BAT后端Java岗面试真题分享
下一篇: 分享50道Java多线程高频面试题,面试不用愁
Java_supermanNO1
博客等级 码龄7年 1170粉丝 329原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值