Redis概述
一.传统的JavaWeb项目
传统的JavaWeb项目使用数据库进行存储数据,而数据库持久化数据主要是面向磁盘,磁盘的读写速度比较慢。在一般的管理系统中,磁盘的读写速度是可以接受的,但是在互联网中,经常需要系统在极短时间内完成成千上万次的读写操作,那么这种读写速度就是不可接受的,严重情况下还会导致数据库瘫痪。
二.NoSQL技术
为了在互联网中克服上面的问题,在系统中引入了NoSQL技术。NoSQL工具是一种基于内存的数据库,Redis和MongoDB是使用最广泛的NoSQL。
三.为什么选择Redis
Redis支持每秒十几万次的读写操作,性能远超数据库。它优越的性能主要来自:
1)基于ANSI C语言编写,接近于汇编语言,运行迅速。
2)基于内存的读写,比基于磁盘的读写快得多。
3)数据结构简单,只有6种数据类型。
综上所述,如果将命中率高的数据的副本存储在Redis中,通过Redis访问操作这些数据,就会大大提高系统性能。
四.Redis的应用场景
1)对常用数据的缓存
1.读操作流程:当需要读取一个数据的时候,先从位于内存的Redis查看是否有对应的数据,有则直接从内存中取出数据并返回。如果没有,则读取位于硬盘中的数据库数据,得到数据之后先将数据写入Redis,然后再返回数据。
2.写操作流程:更新数据或者写入数据时,先将数据写入位于硬盘的数据库,然后再写入位于内存的Redis。
2)需要对数据进行高速读写
一些高速的读写场景,通常会采用异步写入数据库,即:先将高速读写数据缓存到Redis中,当满足一定条件时,再将Redis中的数据写入数据库,Redis起到了数据缓冲的作用。
注意:Redis是基于内存的,数据不能够持久化或者数据持久化不规范,所以需要将Redis数据存入数据库。
五.在java程序中使用Redis
需要导入jedis.jar包才能在java中使用Redis。
六.简单分析Redis的6种数据类型
Redis是一种键值对数据库,以key为索引找到缓存的数据。Redis支持6种数据类型:
1.String(字符串)——保存字符创,整数和浮点数。
2.List(列表)——一个链表,其中每个节点都包含一个字符串。
3.Set(集合)——无序集合,里面每个元素都是一个唯一的字符串。
4.Hash(哈希表散列)——类似java的Map,是一个键值对应的无序列表。
5.Zset(有序集合)——可以包含字符串,整数,浮点值,分值。元素根据分值大小决定。
6.HyperLogLog(基数)——计算重复的值,确定存储的数量,不提供返回功能。
七.关于Redis和数据库
Redis更多的被用作于一种提高系统性能的辅助工具,并不能完全取代数据库。
个人看来,程序,Redis以及数据库这三者的的关系就是计算机CPU,内存和硬盘的关系。CPU可以访问内存也可以访问硬盘,内存存储的是硬盘中部分数据的副本,而近似的,程序则可以访问Redis,也可以访问数据库,Redis只是一种提高性能的一种手段。