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的队列方案
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