Loading

Redis

11.1 什么是Redis?

Redis本质上是一个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适合的场景主要局限在较小数据量的高性能操作和运算上。

11.2 Redis的全称是什么?

Remote Dictionary Server

11.3 redis有哪些数据类型

string 字符串
list 可以重复的集合
set 不可以重复的集合
hash 类似于Map<String,String>
zset(sorted set) 带分数的set

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

512M

11.5 怎么理解Redis事务?

Redis无法做到像关系型数据库事务那样严格的ACID属性,特别是Redis官网明确指出了Redis为什么不支持回滚。

为了内部结构简单、运行效率更高,Redis舍弃了事务控制过程中的回滚支持。一个队列中的多个命令除非是在加入队列时发现错误会做到整个事务都不执行,否则所有命令都会执行,哪怕是队列中有的命令执行失败——
显然Redis并没有在这里对队列中的多条命令进行回滚处理。Redis认为这些错误都应该在开发过程中被发现,而不是产品上线之后。 配合WATCH命令之后Redis的事务可以实现乐观锁效果:一个队列中的命令在执行时如果检测到碰撞,则放弃自己的操作。

11.6 Redis事务相关的命令有哪几个?

MULTI、EXEC、DISCARD、WATCH

    multi,标记一个事务块的开始,返回 ok
    exec,执行所有事务块内,事务块内所有命令执行的先后顺序的返回值,操作被,返回空值 nil
    discard,取消事务,放弃执行事务块内的所有命令,返回 ok
    watch,监视 key 在事务执行之前是否被其他指令改动,若已修改则事务内的指令取消执行,返回 ok
    unwatch,取消 watch 命令对 key 的监视,返回 ok

11.7 Redis key的过期时间和永久有效分别怎么设置?

EXPIRE 和 PERSIST命令

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

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

11.10 Redis如何做内存优化?

尽可能使用散列表(hashes),散列表(是说散列表里面存储的数少)使用的内存非常小,所以你应该尽可能的将你的数据模型抽象到一个散列表里面。
比如你的web系统中有一个用户对象,不要为这个用户的名称,姓氏,邮箱,密码设置单独的key,而是应该把这个用户的所有信息存储到一张散列表里面.

 

posted @ 2021-02-22 14:34  Robinzhao  阅读(15)  评论(0)    收藏  举报