redis常见面试题
redis
- redis:可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。
redis value各数据类型常用方法
1.字符串(String)
- 存储:set key value
- 获取:get key
- 删除:del key
2.列表(List)
- List:可以添加一个元素到列表的头部或尾部(允许重复)
- 存储:
lpush key value 存储到列表头部
rpush key value 存储到列表尾部 - 获取:lrange key start end 范围获取(0 -1 为所有元素)
- 删除:
lpop key 删除列表最左边的元素并返回
rpop key 删除列表最右边的元素并返回
3.集合(Set)
- Set:元素无序,不允许重复
- 存储:sadd key value
- 获取:smembers key 获取集合中的所有元素
- 删除:srem key value 删除集合中的某个元素
4.散列表(Hash)
- Hash:元素存储为map格式
- 存储:hset key field value (field为存入元素的键值)
- 获取:
hget key field 获取某个元素
hgetall key 获取所有元素 - 删除:hdel key field
5.有序集合(SortedSet)
- SortrdSet:不允许元素重复,有序(根据Score进行排序)
- 存储:zadd key score value
- 获取:
zrange key start end 范围获取
zrange key start end withscore 范围获取并显示score的值 - 删除:zren key value
redis中其他常用命令
- keys * 查询所有的键值
- type key 查询键值所对应的数据类型
- del key 删除指定的键值对
redis中的数据持久化
什么是持久化
- 持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。
redis的两种持久化机制
1. RDB(默认)
RDB:是Redis默认的持久化方式。按照一定的时间将内存的数据以快照的形式保存到硬盘中,对应产生的数据文件为dump.rdb。
- 优点:
1、只有一个文件 dump.rdb,方便持久化。
2、容灾性好,一个文件可以保存到安全的磁盘。
3、性能最大化,使用单独子进程来进行持久化,主进程不会进行任何 IO 操作,保证了 redis 的高性能
4、相对于数据集大时,比 AOF 的启动效率更高。 - 缺点:数据安全性低。RDB 是间隔一段时间进行持久化,如果持久化之间 redis 发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候)
2.AOF
AOF:是将Redis执行的每次写命令记录到单独的日志文件中,当重启Redis会重新将持久化的日志中文件恢复数据。(当两种方式同时开启时,数据恢复Redis会优先选择AOF恢复。)
- 优点:
1、数据安全,aof 持久化可以配置 appendfsync 属性,配置成always后,每进行一次 命令操作就记录到 aof 文件中一次。
2、通过 append 模式写文件,即使中途服务器宕机,也可以通过 redis-check-aof 工具解决数据一致性问题。
3、AOF 机制的 rewrite 模式。AOF 文件没被 rewrite 之前(文件过大时会对命令 进行合并重写),可以删除其中的某些命令(比如误操作) - 缺点:
1、AOF 文件比 RDB 文件大,且恢复速度慢。
2、数据集大的时候,比RDB启动效率低。
如何选择合适的持久化方式
- 一般来说,你应该同时使用两种持久化功能。在这种情况下,当 Redis 重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整。
- 如果你非常关心你的数据, 并且可以承受数分钟以内的数据丢失,那么你可以只使用RDB持久化。
- 有很多用户都只使用AOF持久化,但并不推荐这种方式,因为定时生成RDB快照非常便于进行数据库备份, 并且 RDB 恢复数据集的速度也要比AOF恢复的速度要快,除此之外,使用RDB还可以避免AOF程序的bug。
- 如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式。
Redis key的过期时间和永久有效分别怎么设置?
- EXPIRE和PERSIST命令。