Redis:RemoteDictionaryServer,即远程字典服务,是一个开源的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value的Nosql类型的数据库,并提供多种语言的API,是当前最热门的Nosql数据库之一。redis是一个key-value存储系统。它支持存储的value类型包括string(字符串)、list(链表)、set(集合)、zset(sortedset--有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。为了保证效率,数据都是缓存在内存中。redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。Redis是一个高性能的key-value数据库。redis在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
Redis是分布式内存数据存储系统,可以用做数据库、缓存、消息中间件。Redis支持的数据结构有String、List、Set、SortSet、Hash。Redis可以对这些类型执行原子操作。
原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch。
Redis支持数据持久化、主从复制、事务、订阅分发、过期自动删除key、自动故障转移等功能。
数据持久化:redis可以把内存中的数据以文件形式保存。Redis持久化有RDB(快照)和AOF(日志)两种策略。
主从复制:redis集群服务器角色中分为Masterservice(主服务器)、Slave service(从服务器),主从复制保证主从服务器数据的一致性。可以配置读写权限实现服务器读写分离。
事务:redis事务不支持rollback(回滚)。
订阅分发:发送者(pub)发送消息到频道(channel),订阅该频道的订阅者(sub)接收消息。实现场景有群聊、微博、消息推送等。
Redis 使用 ANSI C 编写并且能在绝大Linux系统上运行。
1.在https://github.com/MSOpenTech/redis/releases下载压缩包并解压(或者下载链接:http://pan.baidu.com/s/1dFN5iF3 密码:bl0q),有如下文件
2.打开redis.windows.conf,查询requirepass,设置密码
3.打开cmd,进入解压目录,执行redis-server.exe redis.windows.conf
4.打开客户端测试
打开cmd,进入解压目录,执行redis-cli.exe -h 127.0.0.1 -p 6379 ,再执行auth yoostar403登录密码。
5. redis服务端可以设置日志存放文件,将服务端的日志存放文件中,不过控制台就没有日志输出了。
Redis特性:速度快
Redis官方给出的数据是10W QPS(每秒可以操作数据10W次),这个数据会根据电脑性能和Redis的使用方式不同而略微不同,但是在万级数据中操作没有压力。
redis为什么那么快呢?
(1)纯内存操作
数据存放在内存中,内存的响应时间大约是 100纳秒 ,这是Redis每秒万亿级别访问的重要基础。
(2)编程语言
纯ANSI C编写,不依赖第三方类库。
(3)线程模型
Redis使用单线程操作,避免了频繁的上下文切换,也不存在多进程或者多线程导致的切换而消耗 CPU。
Redis支持5种数据类型
(1)String类型
一个 key 对应一个 value。value可以是简单字符串,也可以是复杂的字符串比如JSON,XML等,也可以是数字(小数、整数)。
(2)string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。
String类型的使用场景:用来做缓存、计数器、分布式锁等。
(3)List类型
list 列表是简单的字符串列表,按照插入顺序排序,数据可以重复。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
List应用场景:好友列表,粉丝列表,消息队列,最新消息排行等。
(4)Set类型
set是string类型的无序集合,set中的元素是没有顺序并且不可重复。
Set应用场景:共同关注、共同喜好、二度好友、分类标签等。
(5) hash类型
一个key对应一个HashMap。
Hash应用场景:用一个对象来存储用户信息,商品信息,订单信息等。
(6)sorted set
sorted set 是有序集合, 它在 set 的基础上增加了一个顺序属性(score),这一属性在添加,修改元素的时候可以指定, 每次指定后, 会自动重新按新的值调整顺序。 可以理解了有两列的mysql 表,一列存 value,一列存score。
Redis具体使用场景
(1)缓存系统
我们要获取数据先从cache(缓存)中获取,如没有在从数据库中获取,以减轻数据库的压力。
计数器和计时器
我们可以使用redis的incr来记录转发数,评论数,视频播放数等,而不会发生错误,这个功能对公司项目的决策是很重要的, 计时,比如验证码一分钟内有效。可以使用 Redis 的 setex 命令设置验证码只保存一分钟,一分钟后失效。
(2)消息队列系统
成熟的消息队列有ActiveMQ,RabbitMQ、Kafka等。Redis 的 List 类型能够很轻松的实现一个消息队列。
(3)排行榜
Redis提供的有序集合(Zset),可以实现排行榜。
(4)实时系统
比如垃圾邮件过滤,电商秒杀等系统就可以使用Redis实现。
Redis的持久化
(1)redis默认持久化RDB
RDB其实就是把数据以快照的形式保存在磁盘上。什么是快照呢,你可以理解成把当前时刻的数据拍成一张照片保存下来。
RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。
当redis节点因为断电或者关机.这是内存释放,数据丢失。
当redis再次启动时首先会根据配置文件查找当前节点的rdb文件,自动的读取rdb文件中的内容.自动的实现数据恢复。