重新认识Redis
2019-08-27 本文已影响0人
先生zeng
这是第一篇Redis的分享,开头主要就是对Redis的整体涉及的模块以及一些应用场景包括运维等会做一些粗劣的说明。
初识Redis
- 1Redis简介。
官方翻译
Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,
高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,
hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,
同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。
Redis[1]是一种基于键值对(key-value)的NoSQL数据库,与很多键值对
数据库不同的是,Redis中的值可以是由string(字符串)、hash(哈希)、
list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、
HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成,因此
Redis可以满足很多的应用场景,而且因为Redis会将所有数据都存放在内存中,
所以它的读写性能非常惊人。不仅如此,Redis还可以将内存的数据利用快照和日志的形式
保存到硬盘上,这样在发生类似断电或者机器故障的时候,内存中的 数据不会“丢失”。
除了上述功能以外,Redis还提供了键过期、发布订阅、事务、流水线、Lua脚本等附加功能。
[1] http://redis.io
[2] http://antirez.com
[3] https://github.com/antirez/redisredis特性
redis特性
1.运行速度快
原因:
1.数据是存放在内存的
2.使用单线程,预防了多线程可能产生的竞争问题
3.redis是使用c语言开发的,距离操作系统更近,执行速度更快。
4.Redis源代码十分精简。
- 基于键值对的数据结构服务器。
了解
很多键值对数据库不同的是,Redis中的值不仅可以是字符串,而且还可以是具
体的数据结构,这样不仅能便于在许多应用场景的开发,同时也能够提高开发效率。
Redis的全称是REmote Dictionary Server,它主要提供了5种数据结
构:字符串、哈希、列表、集合、有序集合,同时在字符串的基础之上演变出了位图(Bitmaps)
和HyperLogLog两种神奇的“数据结构”,并且随着LBS(Location Based Service,
基于位置服务)的不断发展,Redis3.2版本中加入有关GEO(地理信息定位)的功能,
总之在这些数据结构的帮助下,开发者可以开发出各种“有意思”的应用。
-
功能丰富
- 提供键过期功能,实现缓存
- 提供了发布订阅功能,实现消息系统
- 支持Lua脚本功能,可以利用它创造新的Redis命令
- 提供了简单的事务功能
- 提供了流水线的功能,能够将redis命令一次性传到服务端,减少网络开销
- 。。。。。。。
4.持久化
5.主从复制
8.高可用分布式
使用场景
- 缓存-----提供了过期时间设置,还有灵活控最大内存和内存溢出后淘汰策略
- 排行榜系统--根据按照热度,按照发布时间等计算的排行榜,redis提供了列表和有序集合结构,合理的使用可以方便的构建很多系统。
- 计算器应用------redis天然支持计算功能
- 社交网络---点赞,粉丝,共同好友,推送,下拉刷新等实现,访问量很大,传统的关系型不适合保存这些数据
- 消息队列系统-----redis提供了发布订阅和堵塞队列功能,
- 等等
不可使用
可以站在数据规模和数据冷热的角度来进行分析。
站在数据规模的角度看,数据可以分为大规模数据和小规模数据,我们知道Redis的数据是存放在内存中的,虽然现在内存已经足够便宜,但是如果数据量非常大,例如每天有几亿的用户行为数据,
使用Redis来存储的话,基本上是个无底洞,经济成本相当的高。
站在数据冷热的角度看,数据分为热数据和冷数据,热数据通常是指需要频繁操作的数据,反之为冷数据,例如对于视频网站来说,视频基本信息基本上在各个业务线都是经常要操作的数据,而用户的观看记录不一定是经常需要访问的数据,这里暂且不讨论两者数据规模的差异,单纯站在数据冷热的角度上看,视频信息属于热数据,用户观看记录属于冷数据。如果将这些冷数据放在Redis中,基本上是对于内存的一种浪费,但是对于一些热数据可以放在Redis中加速读写,也可以减轻后端存储的负载,可以说是事半功倍。所以,Redis并不是万金油,相信随着我们对Redis的逐步学习,能够清楚Redis真正的使用场景。
如何学好redis
- 切勿当作黑盒使用,开发与运维同样重要
2.阅读源码
Redis是开源项目,由于作者对Redis代码的极致追求,Redis的代码量相对于许多NoSQL数据库来说是非常小的,也就意味着作为普通的开发和运维人员也是可以“吃透”Redis的。通过阅读优秀的源码,不仅能够加深我们对于Redis的理解,而且还能提高自身的编码水平,甚至可以对Redis做定制化,也就是说可以修改Redis的源码来满足自身的需求,例如新浪微博在Redis的早期版本上做了很多的定制化来满足自身的需求,豌豆荚也开源基于Proxy的Redis分布式实现Codis.