Redis是一个C语言编写的高性能的Key-Value数据库,作为传统数据库的有益补充,在共享Session等场景下有越来越广泛的应用。这篇文章介绍一下Redis的基本信息以及安装方式。
概要信息
Redis概要信息如下表所示:
项目 | 说明 |
---|---|
官网 | https://redis.io/ |
开源/闭源 | 开源 |
源码管理:Github | https://github.com/antirez/redis |
源码管理:官方 | http://download.redis.io/releases/redis-5.0.4.tar.gz |
License类别 | BSD-3-Clause License |
开发语言 | C |
当前稳定版本 | 5.0.4 (2019/03/19) |
操作系统支持 | 跨平台,支持Linux/Windows/Mac |
官方镜像地址 | https://hub.docker.com/_/redis/ |
功能特性
Redis使用TCP的方式以客户端-服务器的CS构成实现数据服务的功能。其所支持的数据结构由于考虑到内存使用效率,Redis中的数据结构相较于高级编程语言中所用到的数据结构会使用更少的内存,同时提供了复制,集群,高可用性等常见的数据库的功能。关于其最主要的特性,正像官方镜像中对其功能的描述那样
Redis is an open source key-value store that functions as a data structure server.
主要特点在于如下3点:
- 开源
- key-value方式
- 数据结构存储
相较于其他的key-value形式的开源产品,支持多种数据结构称为其重要特性,其所支持的主要结构如下所示:
字符串(strings)
散列(hashes)
列表(lists)
集合(sets)
有序集合(sorted sets)
…
除此之外还内置了LUA,支持LUA脚本的使用,关于LUA的介绍和简单使用方式可以参看如下文章:
版本管理
Redis使用标准的三段式版本管理实践,具体格式如下所示:
版本格式:major.minor.patchlevel
安装方式
可以使用多种方式进行安装使用,基本都是属于将可执行的文件
- 源码编译方式
- 操作系统自带的Package安装方式
- 官方镜像的docker方式
源码方式安装
源码方式安装在MacOS或者Linux上都是类似,如下以在MacOS上为例进行说明
- 下载对应版本的redis源码并解压
liumiaocn:share liumiao$ mkdir redis
liumiaocn:share liumiao$ cd redis
liumiaocn:redis liumiao$ ls
liumiaocn:redis liumiao$ pwd
/usr/local/share/redis
liumiaocn:redis liumiao$ wget http://download.redis.io/releases/redis-5.0.4.tar.gz
...省略
redis-5.0.4.tar.gz 100%[=============================================================>] 1.88M 37.3KB/s in 81s
...省略
liumiaocn:redis liumiao$ ls
redis-5.0.4.tar.gz
liumiaocn:redis liumiao$ tar xvpf redis-5.0.4.tar.gz
x redis-5.0.4/
...省略
x redis-5.0.4/utils/whatisdoing.sh
liumiaocn:redis liumiao$ ls
redis-5.0.4 redis-5.0.4.tar.gz
liumiaocn:redis liumiao$ cd redis-5.0.4
liumiaocn:redis liumiao$ cd redis-5.0.4
liumiaocn:redis-5.0.4 liumiao$ ls
00-RELEASENOTES COPYING Makefile redis.conf runtest-sentinel tests
BUGS INSTALL README.md runtest sentinel.conf utils
CONTRIBUTING MANIFESTO deps runtest-cluster src
liumiaocn:redis-5.0.4 liumiao$
- 执行make进行编译
liumiaocn:redis-5.0.4 liumiao$ make
cd src && /Library/Developer/CommandLineTools/usr/bin/make all
CC Makefile.dep
...
INSTALL redis-check-rdb
INSTALL redis-check-aof
Hint: It's a good idea to run 'make test' ;)
liumiaocn:redis-5.0.4 liumiao$
- 执行make test进行验证
liumiaocn:redis-5.0.4 liumiao$ make test
...省略
\o/ All tests passed without errors!
Cleanup: may take some time... OK
liumiaocn:redis-5.0.4 liumiao$
- 执行make install 进行安装
liumiaocn:redis-5.0.4 liumiao$ make install
cd src && /Library/Developer/CommandLineTools/usr/bin/make install
...省略
INSTALL install
liumiaocn:redis-5.0.4 liumiao$
安装确认:源码方式
使用make install之后,缺省会将有执行权限的redis相关的二进制文件拷贝至/usr/local/bin下,可使用which命令进行确认
liumiaocn:redis-5.0.4 liumiao$ which redis-server
/usr/local/bin/redis-server
liumiaocn:redis-5.0.4 liumiao$ redis-server --version
Redis server v=5.0.4 sha=00000000:0 malloc=libc bits=64 build=c8feb247a5d1dce2
liumiaocn:redis-5.0.4 liumiao$
启动redis服务端
redis的设定文件为redis.conf,有很多设定选项,此处进行确认时均采用缺省设定进行启动,这样只需要执行redis-server即可启动服务端进程。
liumiaocn:jenkins liumiao$ redis-server
15726:C 24 Apr 2019 20:45:11.367 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
15726:C 24 Apr 2019 20:45:11.367 # Redis version=5.0.4, bits=64, commit=00000000, modified=0, pid=15726, just started
15726:C 24 Apr 2019 20:45:11.367 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
15726:M 24 Apr 2019 20:45:11.369 * Increased maximum number of open files to 10032 (it was originally set to 256).
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 5.0.4 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 15726
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
15726:M 24 Apr 2019 20:45:11.371 # Server initialized
15726:M 24 Apr 2019 20:45:11.371 * Ready to accept connections
通过客户端进行连接
前面提到了redis是CS构成,并介绍了通过redis-server即可启动服务器端,而使用redis-cli作为客户端进行连接。
liumiaocn:~ liumiao$ which redis-cli
/usr/local/bin/redis-cli
liumiaocn:~ liumiao$ redis-cli --version
redis-cli 5.0.4
liumiaocn:~ liumiao$
连接并确认
使用-h指定redis服务器所在ip或者机器名,通过-p指定其运行的端口,缺省为6379,实际上缺省localhost和6379的情况下直接redis-cli回车即可。
liumiaocn:~ liumiao$
liumiaocn:~ liumiao$ redis-cli -h localhost -p 6379
localhost:6379>
安装确认:官方镜像方式
可以使用官方标准镜像,官方进行分普通版和alpine版,以5.0.4为例,镜像的下载方式如下所示
类别 | 镜像tag | 下载命令 |
---|---|---|
普通版 | 5.0.4 | docker pull redis:5.0.4 |
alpine版 | 5.0.4-alpine3.9 | docker pull redis:5.0.4-alpine3.9 |
- 执行示例
执行示例如下所示
liumiaocn:db liumiao$ docker pull redis:5.0.4
5.0.4: Pulling from library/redis
...省略
Status: Downloaded newer image for redis:5.0.4
liumiaocn:db liumiao$
liumiaocn:db liumiao$ docker pull redis:5.0.4-alpine3.9
5.0.4-alpine3.9: Pulling from library/redis
...省略
Status: Downloaded newer image for redis:5.0.4-alpine3.9
liumiaocn:db liumiao$
- 启动服务
liumiaocn:~ liumiao$ mkdir redis
liumiaocn:~ liumiao$ cd redis
liumiaocn:redis liumiao$ mkdir data
liumiaocn:redis liumiao$ docker run -p 20379:6379 -v`pwd`/data:/data --name=redis -d redis:5.0.4-alpine3.9 redis-server
2a093fa8480da2beff5ed4cecbc448d444b75afc12b9ccdd785befaf9f7a7b34
liumiaocn:redis liumiao$ docker ps |grep redis
2a093fa8480d redis:5.0.4-alpine3.9 "docker-entrypoint.s…" 2 seconds ago Up 4 seconds 0.0.0.0:20379->6379/tcp redis
liumiaocn:redis liumiao$
因为此处示例是使用端口转换,将容器中的6379转换为了20379,所以使用客户端连接的时候需要指定端口号
liumiaocn:redis liumiao$ redis-cli -h localhost -p 20379
localhost:20379> info server
# Server
redis_version:5.0.4
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:e0bf1ed947563972
redis_mode:standalone
os:Linux 4.9.87-linuxkit-aufs x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:8.3.0
process_id:1
run_id:1793347818588a21273d9f779fcf5c04a2ad1c3d
tcp_port:6379
uptime_in_seconds:141
uptime_in_days:0
hz:10
configured_hz:10
lru_clock:12583149
executable:/data/redis-server
config_file:
localhost:20379>
关于6379的梗
以前在写tensorflow相关介绍的时候,接触过42这个数字,结果发现这个梗能说一天那么多。有兴趣的可以点击看一下:
而redis的6379缺省端口,除了设定不足给黑客留下劫持端口用在外,还有一个很有趣的梗,很多文章都说这个实际上是一位意大利美女的电话号码,好奇心起来之后找到redis作者的原文,看到了实际的情况是这样的
这位show girl的名字叫做Alessia Merz,而6379不是什么电话号码,而是早期拨号手机上打出Merz的字母所对应的数字按键,而Alessia Merz相关的介绍如下,不过建议不要点击来看。
- http://it.wikipedia.org/wiki/Alessia_Merz
在redis的作者眼中,Merz与愚蠢则是完全划上等号的。可能除了Merz,很多人都会觉得这是一种幽默,但是这个梗只能说一分钟,毕竟有人身攻击的嫌疑。但是另外一个梗则是redis的6379的默认端口和设定往往会带来被攻击的可能性,不知道算不算是替Merz还了一箭之仇。使用 端口劫持 + redis + 6379 + 挖矿 作为关键字,你能搜到很多有趣和悲催的经历。
总结
由于结尾有点跑题,这里总结一下将楼拉正,这篇文章介绍了Redis的概要信息以及两种常用的安装方法,并结合6379的梗提示了安全设定的重要性。