Redis简介和环境搭建

Redis是一款C语言开发的高性能分布式非关系型(Key-Value)内存数据库,遵循BSD协议开源,和传统的关系型数据库相比,Redis的特点是:
- 将数据存储在内存中,因此具有很高的读写性能
- 数据结构类型简洁实用,可以使用Redis定义的命令对特定的数据结构读写
- 支持分布式高可用搭建
在实际使用场景中,Redis通常作为主数据的辅助存储模块,用于缓存一些频繁进行读写的数据,或是用户的登录状态(session)等临时数据。尽管Redis也具有持久化功能,以及不完整的事务支持,但这些都是比较鸡肋的功能,一般较少使用。
官方网站:https://redis.io/
Redis环境搭建
Redis官方没有提供预编译版本安装包,但Windows下有第三方Windows预编译exe可执行文件,学习环境也可以使用Docker部署。生产环境Linux下可以直接从源码编译安装,或是从软件源安装。我这里使用的是最新的7.0.4版本。
Linux环境下编译安装Redis
Redis编译安装十分简单,它没有什么复杂的依赖包,只需要系统安装了编译器即可。以Ubuntu20.04为例,我们可以直接从官网下载Redis的源码包,解压后直接编译安装即可。
make && make PREFIX=/root/redis-7.0.4 install
这里PRFIX参数指定了安装的位置,如上命令编译完成后,我们可以在/root/redis-7.0.4/bin下找到Redis的可执行文件redis-server、redis-cli等。
使用如下命令启动Redis服务。
./bin/redis-server ./conf/redis.conf
注意启动Redis服务时我们需要指定一个配置文件redis.conf,这个文件可以在源码包中找到参考,我这里直接将其复制到了Redis安装目录的conf文件夹下。
Docker安装Redis
使用Docker部署Redis也十分简单,Redis官方提供了Docker镜像,我们可以直接部署。
docker run --name redis -p 6379:6379 -d redis:latest
上述命令,指定了运行最新版本的Redis镜像,并映射容器端口6379到主机,相关数据卷等会自动创建。
Redis基本配置
远程登录
默认配置文件下Redis客户端只能从127.0.0.1登录,但我们线上环境肯定不能把Redis和应用服务器放到同一台机器上,因此需要修改配置文件,启用远程登录。
学习时出于方便考虑,直接将redis.conf中的bind 127.0.0.1注释掉即可。bind用于绑定本机IP,如果绑定的是本地环回地址那么只能本地访问,实际生产环境使用时应该根据需求进行配置,切忌直接把该配置注掉允许任何IP访问。
登录远程redis例子如下。
redis-cli -h 192.168.43.164 -p 6379
设置登录密码
Redis的权限管理功能非常弱(几乎没有),但其实还是可以设置一个密码,起到一定的安全防护(然而这个密码居然还是明文配置的)。在redis.conf中,找到requirepass设置,将其取消注释并设置我们自己的密码即可。
设置密码后重启redis-server,我们通过redis-cli依然可以连接,但是如果不使用密码就不能进行任何操作了。
我们需要在登录时指定密码,例如:
redis-cli -h 192.168.43.164 -p 6379 -a abc123
连接Redis服务
使用redis-cli命令行工具
Redis提供了一个命令行客户端工具redis-cli,可以用于打开交互式客户端连接到Redis服务器。我们可以输入info命令,查看Redis服务的相关配置信息。

我们学习阶段,一定要掌握redis-cli工具,它是操作Redis的基础。
使用图形界面工具
Redis Desktop Manager是一款基于Qt开发的免费Redis图形界面客户端工具,支持数据增删改查、命名空间显示等,我们可以下载使用。
https://github.com/uglide/RedisDesktopManager

在程序代码中操作Redis
Java语言中,有三个Redis客户端库十分常用:
Jedis:老牌的Redis客户端。Lettuce:SpringDataRedis项目默认使用的客户端,特点是支持同步、异步和Reactor式操作。Redisson:底层基于Redis实现了很多实用功能的框架,除了基本的增删改查,还封装了基于Redis的分布式锁、延迟队列等。
其中,Lettuce和Redisson是我们必须掌握的,Jedis在一些非最新的项目中也十分常见,因此也要掌握。不过如果我们了解Redis的各种特性,且能熟练使用redis-cli命令行,就会发现这些库其实都是相通的。
除了Java语言,其他语言也大都有操作Redis的相关库和框架,这里就不多介绍了。
Redis数据库
Redis中具有“数据库”的概念,默认情况一个Redis服务器下会分成16个库,这些库我们一般叫它们以0-15号库。当然这里为什么是16这个数字,可能并没有什么特别的理由,也许只是作者觉得16比较吉利,实际使用中,我们一般只用0号库。
select 切换数据库
dbsize 查看当前库的Key数量
flushdb 清空当前库
flushall 清空全部库
注意其中flush、flushall都是相当危险的命令!生产环境中,我们可以在redis.conf中添加如下配置,屏蔽或重命名这类危险命令。
rename-command FLUSHDB ""
rename-command FLUSHALL ""