Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
概念:Redis是一款高性能的NoSQL系列的非关系型数据库。
什么是NOSQL?
NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。
随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
NOSQL和关系型数据库比较
优点:
1)成本:nosql数据库简单易部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。
2)查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库。
3)存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型。
4)扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难。
缺点:
1)维护的工具和资料有限,因为nosql是属于新的技术,不能和关系型数据库10几年的技术同日而语。
2)不提供对sql的支持,如果不支持sql这样的工业标准,将产生一定用户的学习和使用成本。
3)不提供关系型数据库对事务的处理。
非关系型数据库的优势
1)性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。
2)可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
关系型数据库的优势
1)复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。
2)事务支持使得对于安全性能很高的数据访问要求得以实现。对于这两类数据库,对方的优势就是自己的弱势,反之亦然。
因此,关系型数据库与NoSQL数据库并非对立而是互补的关系,即通常情况下使用关系型数据库,在适合使用NoSQL的时候使用NoSQL数据库,让NoSQL数据库对关系型数据库的不足进行弥补。
一般会将数据存储在关系型数据库中,在nosql数据库中备份存储关系型数据库的数据
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供测试数据,50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s ,且Redis通过提供多种键值数据类型来适应不同场景下的存储需求。
Redis的应用场景 |
---|
缓存(数据查询、短连接、新闻内容、商品内容等等) |
聊天室的在线好友列表 |
任务队列。(秒杀、抢购、12306等等) |
应用排行榜 |
网站访问统计 |
数据过期处理(可以精确到毫秒 |
分布式集群架构中的session分离 |
Redis中文网下载,或【百度网盘m5gl】解压版本。
文件名 | 描述 |
---|---|
redis.windows.conf | 配置文件 |
redis-cli.exe | Redis客户端 |
redis-server.exe | Redis服务端 |
Redis存储的是Key,Value格式的数据,其中key是字符串,Value有5种数据结构
Redis支持的键值数据类型 |
---|
字符串类型 String |
哈希类型 Hash:Map格式 |
列表类型 List:LinkedList格式 |
集合类型 Set |
有序集合类型 Sortedset |
这里要注意的是,List中的元素可以重复,Set中的元素不可以重复,Sortedset中的元素不可以重复且自然排序。
描述 | 语法 |
---|---|
查找所有符合给定模式( pattern)的 key | KEYS pattern ,例KEYS * |
返回 key 所储存的值的类型 | TYPE key |
删除指定的key value | DEL key |
修改 key 的名称 | RENAME key newkey |
操作键类型Key的详细命令参考:https://www.redis.net.cn/tutorial/3507.html
操作字符串类型String的详细命令参考:https://www.redis.net.cn/tutorial/3508.html
描述 | 语法 |
---|---|
设置指定 key的value | SET key value |
获取指定 key的value | GET key |
删除指定 key和value | DEL key |
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
操作哈希类型Hash的详细命令参考:https://www.redis.net.cn/tutorial/3509.html
描述 | 语法 |
---|---|
将哈希表 key 中的字段 field 的值设为 value | HSET key field value |
获取存储在哈希表中指定字段的值 | HGET key field |
获取在哈希表中指定 key 的所有字段和值 | HGETALL key |
删除一个或多个哈希表字段 | HDEL key field2 [field2] |
Redis列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边) 一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
操作列表类型List的详细命令参考:https://www.redis.net.cn/tutorial/3510.html
描述 | 语法 |
---|---|
将一个或多个值插入到列表头部 | LPUSH key value1 [value2] |
将一个或多个值插入到列表尾部 | RPUSH key value1 [value2] |
获取列表指定范围内的元素 | LRANGE key start stop |
移出并获取列表的头部第一个元素 | LPOP key |
移出并获取列表的尾部第一个元素 | RPOP key |
Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
集合中最大的成员数为 232-1 (4294967295, 每个集合可存储40多亿个成员)。
操作集合类型Set的详细命令参考:https://www.redis.net.cn/tutorial/3511.html
描述 | 语法 |
---|---|
向集合添加一个或多个成员 | SADD key member1 [member2] |
返回集合中的所有成员 | SMEMBERS key |
移除集合中一个或多个成员 | SREM key member1 [member2] |
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为232-1 (4294967295, 每个集合可存储40多亿个成员)。
操作有序集合类型Sortedset的详细命令参考:https://www.redis.net.cn/tutorial/3512.html
描述 | 语法 |
---|---|
向有序集合添加一个或多个成员,或者更新已存在成员的分数 | ZADD key score1 member1 [score2 member2] |
通过索引区间返回有序集合成指定区间内的成员 | ZRANGE key start stop [WITHSCORES] |
移除有序集合中的一个或多个成员 | ZREM key member [member ...] |
因为Redis是一个基于内存的非关系型数据库,而内存是临时的,服务器或Redis重启会造成数据丢失。因此,可以将Redis内存中的数据持久化保存到硬盘文件中。这样重启服务器或Redis时,会将数据恢复到内存中。
默认方式,不需要进行配置。在一定的间隔时间中,检测key的变化情况,然后持久化数据。也可以对redis.windows.conf文件进行手动进行配置,配置完成后需要重新启动Redis服务器,并指定配置文件名称。
代码 | 描述 |
---|---|
save 900 1 |
900秒后,如果最少有1个key发生变化就会持久化数据 |
save 300 10 |
300秒后,如果最少有10个key发生变化就会持久化数据 |
save 60 10000 |
60秒后,如果最少有10000个key发生变化就会持久化数据 |
日志记录的方式,记录每一条命令的操作后持久化数据。需要对redis.windows.conf文件中的appendonly no
设置为appendonly yes
,保存退出即可。配置完成后需要重新启动Redis服务器,并指定配置文件名称。
代码 | 描述 |
---|---|
appendonly no |
no 为关闭AOF模式持久化机制,yes 开启AOF模式持久化机制 |
appendfsync always |
每一次操作都进行持久化 |
appendfsync everysec |
每隔1秒进行一次持久化 |
appendfsync no |
不进行持久化 |
(1)出现双击redis-server.exe启动Redis时,命令窗口一闪的问题。或在cmd命令窗口出现以下错误:
解决方案如下:
①新建start.bat文件,内容为redis-server.exe redis.windows.conf
②编辑redis.windows.conf配置文件,限制内存。
③双击start.bat启动Redis即可。