redis是当今世界最为流行的非关系型数据库之一,国内的华为、阿里巴巴、腾讯、百度、今日头条、美团等,国外的谷歌、微软、亚马逊等大型互联网公司都在广泛的应用Redis。
其实不光在互联网公司,Redis在一些非互联网公司中也有非常广泛的应用。
可以这么说但凡有点规模的IT公司,Redis都是标配,Redis与软件研发息息相关,如果不懂Redis,你将错过整个世界。
所以我们不光要学Redis,还要把Redis学好。
相信很多朋友即使没有用过也听说过Redis, Redis似乎是我们IT人群中的一个高频词汇。
用官方的话来说
Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker.
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。
是不是你每个字都认识,但是连起来就有点懵逼了,好吧, 那我再来给大家翻译一下。
大家把Redis想象成为一个非关系型数据库,所以Redis和MySQL是完全不一样的,Redis是一个NoSql数据库(not only SQL), 这个数据库存在于内存中,并且不用建立和维护表、字段等信息。而且Redis可以做的很多有趣的事,MySQL都是无能为力的哦。
Redis不像MySQL那样通过SQL语句来存取数据。它是通过一定的数据结构配合对应的命令来完成数据存取的。
Redis 支持的数据结构包括 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs和 地理空间(geospatial) 索引半径查询
为了让大家有一个直观的感受,我们以字符串(strings)为例,来看一下Redis到底是怎么存取数据的
redis-server.exe redis.windows.conf
redis-cli -h 127.0.0.1 -p 6379
set name zhangsan
get name
上边的name是我们可以随便定义的名字,也可以是age或者address, 这叫做Key, 而zhangsan 就是我们的Value。
Redis的应用场景非常之多,下面我简单列举几个最经典的场景
随着系统用户的增多,数据库的访问压力也在逐渐增加,有些不常用的数据比如 字典数据、系统配置数据等就可以放入到Redis中缓存起来,这样就不用每次都去访问数据库来获取这些数据,从而减小了数据库的压力。
大体流程图如下
系统在单机部署的情况下,服务器能够根据用户传来的cookie找到其对应的服务器Session,从而能够确定该用户的身份信息。
但是在集群部署的情况下,上述流程就会失效。
假如用户登录的请求被分发到了server1, server1上会存储用户的session信息。
假如用户下一步的操作是获取菜单,该请求同样被分发到了server1, 这时是没有问题的。
但是当用户获取权限时请求被分发到了server5, 由于server5不存在用户的session信息,所以要求其重新登录,显然这是一个不合理的要求。
为了解决这个问题我们可以把Session信息存入到Redis中,所有服务器共享Redis 进而 共享了Session信息。
同样在单机部署的情况下,JVM的锁机制是没有问题的,可以达到同步线程的目的。但是在集群部署的情况下,JVM的锁机制将完全失效,因为显然锁住集群一个节点的JVM对象对集群其他节点是不可见的,所以分发到其他节点的请求,照样可以顺利运行,并不受锁的限制。
因为Redis是所有集群节点共享的,用Redis来实现锁,就可以帮我们完美解决这个问题。
如想了解更多关于Redis的知识,可以私信笔者,会有资料相送哦。