Redis是一个开源KV存储系统,与MemCache类似。Redis将大部分数据存储在内存中,支持的数据类型包括:字符串、哈希表、链表、无序集合、无需集合以及基于这些数据类型的相关操作。
Redis使用C语言开发,在大多数像C、C#、C++、OC、PHP、Python、Java、Perl、Lua、Erlang等均由可用的客户端来访问Redis服务器.。
Redis基于内存操作,读写速度很快(IO),100000读写每秒,可作为内存缓存服务器,提供持久化存储方案,可作为结构不复杂的数据库使用。
为什么要使用缓存呢?
- 5400r的笔记本硬盘 读写速度(IO) 50~90MB/s
- 7200r的台式机硬盘 读写速度(IO) 90~190MB/s
- 固态硬盘读写速度可达到 500MB/s
- DDRIII1333内存的读写速度大概为8G/s
- Redis读写速度100000次/秒
- MySQL读写速度 8000读/秒,4000写/秒。
Redis应用场景
- 获取最新n个数据的操作
获取网站最新文章,可将最新的5000条评论的ID放入Redis的List集合中,并将超出集合部分从数据库获取(以时间为权重)。 - 排行榜应用,获取top n操作
按顶的次数作为权重排序,此时需有序集合zset,将需要排序的值设置为sorted set的score,将具体的数据设置为对应的value,每次仅需执行一条zadd命令即可。 - 需精准设定过期时间的应用
可将sorted set 的 score 值设置为过期时间的时间戳,即可利用过期时间排序,定时清除过期数据了。不仅是清除redis中的过期数据,你完全可把redis里的过期时间当成对数据库中数据的索引。用redis来查询出哪些数据需要过期删除,然后再精准地从数据库中删除相应的记录。 - 计数器应用
Redis的命令都是原子性的,可轻松利用incr和decr命令来构建计数器系统。 - uniq操作来获取某段时间所有数据去重值
使用Redis的set数据结构最合适,只需不断地将数据往set中扔就行了,set意为集合,所以会自动去重。 - pub/sub构建实时消息系统
Redis的pub/sub系统可构建实时的消息系统 - 构建队列系统
利用List可构建队列系统,使用sorted set甚至可构建有优先级的队列系统。 - 缓存
最常用,性能优先于memcached(被libevent拖慢),数据结构更多样化。
Redis与MemCache对比
Redis与MemCache相比较而言,MemCache的批量读写性能要比Redis好一些。其次,MemCache集群扩充比较容易。Redis性能比较MemCache要高,主要表现在网络通信这一块。MemCache主要使用libevent第三方的网络通信库,Redis作者使用epool做高并发服务器。
例如:当Redis只是作为Cache和MySQL同步使用时
- 读:读Redis后若无数据,去读mysql并将mysql数据回写入Redis。
- 写:写mysql成功后,写入Redis。