1. 什么是Redis
    Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis全称为:Remote Dictionary Server(远程数据服务),bai该软件使用C语言编写,Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。
  2. Redis特点
    Redis以内存作为数据存储介质,所以读写数据的效率极高,远远超过数据库。以设置和获取一个256字节字符串为例,它的读取速度可高达110000次/s,写速度高达81000次/s。
    Redis跟memcache不同的是,储存在Redis中的数据是持久化的,断电或重启后,数据也不会丢失。因为Redis的存储分为内存存储、磁盘存储和log文件三部分,重启后,Redis可以从磁盘重新将数据加载到内存中,这些可以通过配置文件对其进行配置,正因为这样,Redis才能实现持久化。

Redis支持主从模式,可以配置集群,这样更利于支撑起大型的项目,这也是Redis的一大亮点。

  1. Redis应用场景,它能做什么
    众多语言都支持Redis,因为Redis交换数据快,所以在服务器中常用来存储一些需要频繁调取的数据,这样可以大大节省系统直接读取磁盘来获得数据的I/O开销,更重要的是可以极大提升速度。拿大型网站来举个例子,比如a网站首页一天有100万人访问,其中有一个板块为推荐新闻。
    Redis 的应用场景包括:缓存系统(“热点”数据:高频读、低频写)、计数器、消息队列系统、排行榜、社交网络和实时系统。

    应用场景:
    我们简单举个实例来描述下Hash的应用场景,比如我们要存储一个用户信息对象数据,包含以下信息:
    用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,如果用普通的key/value结构来存储,主要有以下2种存储方式


第一种方式将用户ID作为查找key,把其他信息封装成一个对象以序列化的方式存储,这种方式的缺点是,增加了序列化/反序列化的开销,并且在需要修改其中一项信息时,需要把整个对象取回,并且修改操作需要对并发进行保护,引入CAS等复杂问题。

第二种方法是这个用户信息对象有多少成员就存成多少个key-value对儿,用用户ID+对应属性的名称作为唯一标识来取得对应属性的值,虽然省去了序列化开销和并发问题,但是用户ID为重复存储,如果存在大量这样的数据,内存浪费还是非常可观的。
那么Redis提供的Hash很好的解决了这个问题,Redis的Hash实际是内部存储的Value为一个HashMap,并提供了直接存取这个Map成员的接口,如下图:

  也就是说,Key仍然是用户ID, value是一个Map,这个Map的key是成员的属性名,value是属性值,这样对数据的修改和存取都可以直接通过其内部Map的Key(Redis里称内部Map的key为field), 也就是通过 key(用户ID) + field(属性标签) 就可以操作对应属性数据了,既不需要重复存储数据,也不会带来序列化和并发修改控制的问题。很好的解决了问题。

要是直接从数据库查询,那么一天就要多消耗100万次数据库请求。上面已经说过,Redis支持丰富的数据类型,所以这完全可以用Redis来完成,将这种热点数据存到Redis(内存)中,要用的时候,直接从内存取,极大的提高了速度和节约了服务器的开销。
总之,Redis的应用是非常广泛的,而且极有价值,真是服务器中的一件利器,所以从现在开始,我们就来一步步学好它。

©著作权归作者所有:来自51CTO博客作者mb5fcf1f02dcdd1的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 假期玩得开心也不忘充电,学习Python操作JSON,网络数据交换不用愁
  2. 像数据库一样设计你的 redux 数据结构
  3. 数据对比分析法,看这篇就够了!
  4. 超级菜鸟怎么学习数据分析
  5. JavaScript数据结构(4):树
  6. 用Excel做数据地图
  7. Excel数据处理(缺失值/重复值/异常值/拆分)
  8. JavaScript 数据结构(2-2):栈与队列-队列篇
  9. 只会环比下降3%的数据分析师还有救吗?

随机推荐

  1. Android LaunchMode and StartActivityFo
  2. eclipse中android模拟器找不到的解决办法
  3. 获得Android Linux系统增删文件的权限
  4. Android中HandlerThread的使用及源码解析
  5. Android(安卓)ViewPager多页面滑动切换以
  6. Android(安卓)NDK开发之旅1--NDK介绍
  7. [Android官方开发者博客.翻译]Android的H
  8. 进度条与拖动条的使用学习
  9. android SQLite的使用
  10. Android(安卓)动态替换 Manifest.xml中的