Redis 100问

1.redis是什么?

  1)key-value型内存数据库,value有多种数据类型,如string,list,set,hash等

  2)带有key过期策略

  3)单线程react模型,支持IO多路复用

  4)支持简单的事务

  5)支持发布与订阅模式

  6)支持Lua脚本

  7)可选择持久化,有RDB(数据文件)、AOF(命令文件)

  8)支持主从复制,支持全同步和部分同步,自带主从监控程序

  9)支持集群和分片

  10)开源,社区强大,C语言编写,linux版本支持到4.0.X,windows版本在ms公司,支持到3.2.X版本,有各种语言的api

  11)支持慢查询日志

2.redis的主要版本?

   1)2.6.X系列(2013之前)

    支持lua脚本。
    对于client的limit限制变成无限制。
    aof性能提升
    key的过滤时间可以支持毫秒级别了
    支持新命令dump以及restore ,即序列化与反序列化操作。
    大数据存储性能优化

   2)2.8.X系列(2013~2015)

    支持排序集数据类型命令
    提高了只读副本的弹性和容错性能。
    支持部分重新同步。
    支持必须始终可用的只读副本的用户定义最小数目。
    全面支持pub/sub,将服务器上发生的事件通知客户端。
    自动检测主节点故障并将主节点故障转移至辅助节点。

   3)3.0.0~3.0.7(2012~2016)

    开始支持集群

   

   4)3.2.0~3.2.11(2014~2017)

    支持数据分区
    支持地理空间索引,GEO命令支持
    内存优化,相同数据占用更少的内存
    BITFIELD命令优化

   5)4.0.0~4.0.9(2017~现在)


3.redis的数据类型有哪些?

  1)字符串对象

  2)列表对象

 3)哈希对象

 4)集合对象

 5)有序集合对象zset

 6)HyperLogLog( 2.8.9 版本添加)

 7)geo(3.2.0版本)

4.redis的底层数据结构有哪些?

  1)简单动态字符串 SDS

  2)链表

  3)字典

  4)跳跃表

  5)整数集合

  6)压缩列表

5.redis如何利用多核的性能?

  1)单机运行多个实例,taskset绑定

  2)组成master-master或者master-slave的形式,耗时的读命令可以完全在slave进行

6.redis支持虚拟内存吗?

7.redis为什么要重写epoll?

8.redis为什么要重写虚拟内存的访问

(6-8)主要还是为了高性能,参考:https://timyang.net/data/redis-misunderstanding/

9.Redis分布式锁的正确实现方式?

  关键是redis提供了大量的原子命令和基于lua的原子脚本

  SET key value [EX seconds] [PX milliseconds] [NX|XX]
  summary: Set the string value of a key
  since: 1.0.0

  参考:https://www.cnblogs.com/linjiqin/p/8003838.html

10.redis和memcache的比较

  redis支持更多的数据结构

  redis支持很多原子操作

参考:https://www.cnblogs.com/JavaBlackHole/p/7726195.html

11.数据库更新成功,redis未更新成功怎么办

1)做个失败的队列,更新失败就总更新 一直到成功

2)更新redis失败,直接把这个对象从redis中删除掉

12.redis读写分离场景,主服务挂了,数据库已更新,如何处理?

13.redis秒杀

 秒杀的本质是商品数组和用户数组的匹配。

1)基于watch的乐观锁方案

watch用于监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。这种方案跟mysql中的乐观锁方案类似,具体表现也是一样的。

2)基于list的队列方案

基于队列的方案利用了redis出队操作的原子性,抢购开始之前首先将商品编号放入响应的队列中,在抢购时依次从队列中弹出操作,这样可以保证每个商品只能被一个进程获取并操作,不存在超发的情况。该方案的优点是理解和实现起来都比较简单,缺点是当商品数量较多是,需要将大量的数据存入到队列中,并且不同的商品需要存入到不同的消息队列中

3)incr实现

14.使用Redis构建Web应用举例

1)登录和cookie缓存——有效期限的session

2)使用Redis实现购物车

3)网页缓存

4)数据行缓存

5)网页分析

15. 数据安全与性能保障?

1)持久化选项

2)复制

3)Redis事务

16.使用Redis构建支持程序

1) 使用Redis来记录日志
2) 计数器和统计数据 
3)查找IP所属城市以及国家
4) 服务的发现与配置

17.使用 Redis 构建应用组件

1) 自动补完
2) 分布式锁——redis的原子操作
3) 计数信号量
4) 任务队列

5) 消息拉取——sub/pub

6) 使用 Redis 进行文件分发

18.基于搜索的应用程序

1) 使用 Redis 进行搜索——集合的并集、交集等
2) 有序索引
3)广告定向

4) 职位搜索

19.构建简单的社交网站
1)用户和状态
2) 定制时间线
3) 关注者列表以及正在关注列表
4) 状态消息的发布与删除

5) 流 API

20.如何降低内存占用?

1)短结构
2) 分片结构

3) 打包储存二进制位和字节

21.比较redis4.0、codis、阿里云redis

22.redis使用proxy的设计原理

23.redis集群理论上能支持多少台机器,有什么性能问题吗?

25.redis支持短链接吗?

26.redis是否是完全的单线程?

27.redis的hyperloglog有什么作用?

28.redis的geo有什么作用

29.redis从哪个版本开始支持集群,哪个版本开始完整支持集群

30.如何遍历redis的命令

   help @

31.redis的LRU实现原理

32.redis对象的编码是什么意思?

33.redis的事务控制为什么不使用MVCC?

34.redis集群的路由使用zookeeper保持的架构?

35.知道redis Module吗?

35.BloomFilter

36.RedisSearch

37.Redis-ML 机器学习

38.redis的阻塞队列

39.redis的aof有几种存储方式,如何保证不丢失数据

1)每次执行一句,保存一次

2)一秒一次

3)让操作系统决定

参考:

# appendfsync always

appendfsync everysec
# appendfsync no

40.redis集群在reshard时候没有执行完,如何解决?

41.redis主从同步的原理

1)同步还是异步?

2)全同步还是增量同步

3)采用什么类型的消息传递数据?

4)如何保证failover?

5)主机和从机的过期策略是否一致?

6)1主多从,假设服务本身没有异常退出,可能有哪些潜在的风险?

42.redis的集群分片,如何知道key所在的机器?

43.redis有几个配置文件?

44.单机版redis支持多少个数据库

45.redis info命令的作用

46.redis.rb作用是什么,如何使用

46.redis的惰性删除是什么意思?

47.redis-conf解释

1)include 包含模板

2)bind 192.168.1.100 10.0.0.1 绑定访问ip

3)protected-mode  yes是否支持远程访问

4)port 6379 端口号

5)tcp-backlog 连接队列

6)timeout 客户端超时关闭连接

7)tcp-keepalive 心跳时长

8)daemonize no  是否在后台执行,yes:后台运行;no:不是后台运行(老版本默认)

9)supervised no

10)pidfile

11)loglevel notice

12)logfile ""

13)syslog-enabled no

14)syslog-ident redis

15)databases 16 数据库个数

16) save 900 1 快照生成的时间和个数限制

17)stop-writes-on-bgsave-error yes

18)rdbcompression yes

19)rdbchecksum yes

20)dbfilename dump.rdb

21)dir ./

22)slaveof <masterip> <masterport>

23)masterauth <master-password>

24)slave-serve-stale-data yes

25)slave-read-only yes

26)repl-diskless-sync no

27)repl-diskless-sync-delay 5

28)repl-ping-slave-period 10

29)repl-timeout 60

30)repl-disable-tcp-nodelay no

31)repl-backlog-size 1mb

32)repl-backlog-ttl 3600

33)slave-priority 100

34)min-slaves-to-write 3

35)min-slaves-max-lag 10

36)slave-announce-ip 5.5.5.5

37)slave-announce-port 1234

38)requirepass foobared

39)rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52

40)maxclients 10000

41)maxmemory <bytes>

42)maxmemory-policy noeviction

43)maxmemory-samples 5

44)appendonly no

45)appendfilename "appendonly.aof"

46)appendfsync always

47)no-appendfsync-on-rewrite no

48)auto-aof-rewrite-percentage 100

49)auto-aof-rewrite-min-size 64mb

50)aof-load-truncated yes

51)lua-time-limit 5000

52)cluster-enabled yes

53)cluster-config-file nodes-6379.conf

54)cluster-node-timeout 15000

55)cluster-slave-validity-factor 10

56)cluster-migration-barrier 1

57)cluster-require-full-coverage yes

58)slowlog-log-slower-than 10000

59)slowlog-max-len 128

60)latency-monitor-threshold 0

61)notify-keyspace-events ""

62)hash-max-ziplist-entries 512

63)hash-max-ziplist-value 64

64)list-max-ziplist-size -2

65)list-compress-depth 0

66)set-max-intset-entries 512

67)zset-max-ziplist-entries 128

68)zset-max-ziplist-value 64

69)hll-sparse-max-bytes 3000

70)activerehashing yes

71)client-output-buffer-limit normal 0 0 0

72)hz 10

73)aof-rewrite-incremental-fsync yes



猜你喜欢

转载自blog.csdn.net/u014112608/article/details/80854990