1. 什么是 Redis?
redis是一个高性能的key-value数据库,它是完全开源免费的,而且redis是一个NOSQL类型数据库,是为了解决高并发、高扩展,大数据存储等一系列的问题而产生的数据库解决方案,是一个非关系型的数据库。但是,它也是不能替代关系型数据库,只能作为特定环境下的扩充。
redis是一个以key-value存储的数据库结构型服务器,它支持的数据结构类型包括:字符串(String)、链表(lists)、哈希表(hash)、集合(set)、有序集合(Zset)等。为了保证读取的效率,redis把数据对象都存储在内存当中,它可以支持周期性的把更新的数据写入磁盘文件中。而且它还提供了交集和并集,以及一些不同方式排序的操作。
2. 为什么 Redis 需把数据放到内存中?
若不将数据读到内存中,磁盘I/O速度会严重影响Redis的性能。
Redis具有快速和数据持久化的特征。
Redis为了提高读写时的速度将数据读到内存中,并通过异步的方式将数据写入磁盘。
注:若设置最大使用内存,则数据已有记录数达到内存限值后不能继续插入新值。
为什么内存读取比磁盘读取数据速度快?
1)内存是电器元件,利用高低电平存储数据,而磁盘是机械元件,电气原件速度超快,而磁盘由于在每个磁盘块切换时磁头会消耗很多时间,说白了就是IO时间长,两者性能没发比较。
2)磁盘的数据进行操作时也是读取到内存中交由CPU进行处理操作,因此直接放在内存中的数据,读取速度肯定快很多。
3. Redis 支持那些数据类型?
String字符串
命令: set key value
string类型是二进制安全的,它可以包含任何数据,如图片或序列化对象等。
string类型是Redis最基本的数据类型,一个键最大能存储512MB。
Hash(哈希)
命令: hmset name key1 value1 key2 value2
Redis hash是一个键值(key=>value)对集合。
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
List(列表)
Redis列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边)
命令: lpush name value
key对应list的头部添加字符串元素
命令: rpush name value
key对应list的尾部添加字符串元素
命令: lrem name index
key对应list中删除count个和value相同的元素
命令: llen name
返回key对应list的长度
Set(集合)
命令: sadd name value
Redis的Set是string类型的无序集合。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
zset(sorted set:有序集合)
命令: zadd name score value
Redis zset和set一