Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。 本篇内容包括:Redis 简介(为什么快?为什么单线程?优点,缺点等),Redis 在 Java Web 中的应用,Redis 安装(Win、Linux、Mac 场景下的安装)等内容
Redis 是 C 语言开发的一个开源的(遵从 BSD 协议)高性能键值对(key-value)的内存数据库,可以用作数据库、缓存、消息中间件等。
它是一种 NoSQL(not-only sql,泛指非关系型数据库)的数据库。是一种基于内存的数据库,并且提供一定的持久化功能。
Redis 作为一个内存数据库:性能优秀,数据在内存中,读写速度非常快,支持并发 10W QPS。单进程单线程,是线程安全的,采用 IO 多路复用机制。丰富的数据类型,支持字符串(strings)、散列(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等。支持数据持久化。可以将内存中数据保存在磁盘中,重启时加载。主从复制,哨兵,高可用。可以用作分布式锁。可以作为消息中间件使用,支持发布订阅。
redis的速度非常的快,单机的redis就可以支撑每秒10几万的并发,相对于mysql来说,性能是mysql的几十倍。速度快的原因主要有几点:
Redis 使用多线程并非是完全摒弃单线程,Redis 还是使用单线程模型来处理客户端的请求,只是使用多线程来处理数据的读写和协议解析,执行命令还是使用单线程。
这样做的目的是因为redis的性能瓶颈在于网络 IO 而非 CPU,使用多线程能提升 IO 读写的效率,从而整体提高 Redis 的性能。
Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。
总之,如果在合适的场景使用好Redis,它就会像一把瑞士军刀一样所向披靡、无往不利!!!
Redis 根据使用数据类型的不同,对应的使用场景有很多,例如:
在日常对数据库的访问中,读操作的次数远超写操作,比例大概在 1:9
到 3:7
,所以需要读的可能性是比写的可能大得多的。当我们使用SQL语句去数据库进行读写操作时,数据库就会去磁盘把对应的数据索引取回来,这是一个相对较慢的过程。
如果我们把数据放在 Redis 中,既直接放在内存之中,让服务端直接去读取内存中的数据,那么这样速度明显就会快上不少,并且会极大减小数据库的压力,但是使用内存进行数据存储开销也是比较大的,限于成本的原因,一般我们只是使用 Redis 存储一些常用和主要的数据,比如用户登录的信息等。
一般而言在使用 Redis 进行存储的时候,我们需要从以下几个方面来考虑:
在考虑了这些问题之后,如果觉得有必要使用缓存,那么就使用它!
使用 Redis 作为缓存的读取逻辑如下图所示:
从上图我们可以知道以下两点:
从上面的分析可以知道,读操作的可能性是远大于写操作的,所以使用 Redis 来处理日常中需要经常读取的数据,速度提升是显而易见的,同时也降低了对数据库的依赖,使得数据库的压力大大减少。
使用 Redis 作为缓存的写入逻辑如下图所示:
从流程可以看出,更新或者写入的操作,需要多个 Redis 的操作,如果业务数据写次数远大于读次数那么就没有必要使用 Redis。
在如今的互联网中,越来越多的存在高并发的情况,比如天猫双11、抢红包、抢演唱会门票等,这些场合都是在某一个瞬间或者是某一个短暂的时刻有成千上万的请求到达服务器,如果单纯的使用数据库来进行处理,就算不崩,也会很慢的,轻则造成用户体验极差用户量流失,重则数据库瘫痪,服务宕机,而这样的场合都是不允许的!
所以我们需要使用 Redis 来应对这样的高并发需求的场合,我们先来看看一次请求操作的流程图:
我们来进一步阐述这个过程:
cmd
。输入redis-cli
并回车。(redis-cli是客户端程序)如图正常提示进入,并显示正确端口号,则表示服务已经启动
set mykey1 "I love you all!"
并回车,用来保存一个键值。再输入get mykey1
,获取刚才保存的键值
mv redis-6.2.4.tar.gz /usr/local/
tar -zxvf redis-6.2.4.tar.gz
yum install gcc-c++
cd redis-6.2.4
、make
、cd ./src
、 make install
vi redis.conf
将 daemonize
属性改为 yes
bind 127.0.0.1
这一行给注释掉,这里的bind指的是只有指定的网段才能远程访问这个redis,注释掉后,就没有这个限制了protected-mode
设置成 no
(默认是设置成yes的, 防止了远程访问,在redis3.2.3版本后)redis-server redis.conf
redis-cli -p 6379
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
;brew install redis
;/usr/local/Cellar/
路径下redis.conf
存放在/usr/local/etc
路径下redis-server /usr/local/etc/redis.conf
或 brew services start redis
或 redis-server
ps axu | grep redis
redis-cli -h 127.0.0.1 -p 6379
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有