安装和使用Redis

Redis是一个高性能的内存数据库,它体积轻巧性能又高,在企业中被广泛使用。

安装Redis

Windows安装

Redis是为Linux系统设计的,但是也有团队为Windows做了移植。我们可以到这里下载Redis的Windows版本。

如果使用NuGet或者Chocolatey的话,也可以用这些工具安装Windows版的Redis。

# Nuget
PM> Install-Package Redis-64

# Chocolatey
choco install redis-64

不过我不准备使用Windows 移植版的Redis,因为Redis是为Linux设计的,而且大部分公司使用的服务器也是Linux系统,所以我们不妨直接学习Linux版本Redis的安装和使用。

Linux安装

相比之下,由于Redis一开始就是设计在Linux上使用的,所以Linux安装就比较简单了。主流的Linux系统的官方软件仓库中应该都有Redis软件,所以直接可以利用相应的包管理器安装。

例如,在ArchLinux中,使用下面命令就可以安装redis了。

sudo pacman -S redis

对于其他Linux系统,使用它们的包管理器安装Redis即可。


ArchLinux安装

安装完成之后,使用下面的命令启动Redis。

# 让redis开机自启
systemctl enable redis

# 启动redis
systemctl start redis

Docker安装

其实最好的办法还是使用Docker安装Redis,由于Docker的容器化特性,我们可以在镜像中打包一个配置好的Redis。比方说,著名的Gitlab的Docker镜像中就直接打包了Ruby、PostGreSQL、Redis等软件,我们不需要任何额外配置即可使用整合好的Gitlab。

首先拉取Redis镜像。

docker pull redis

然后启动Redis镜像,其中name可以修改为自己想要的名字。

docker run --name some-redis -d redis

如果需要持久化数据,需要在启动命令中指定数据卷,下面的命令默认把数据存放到/data。如果需要自定义数据卷的位置,可以使用--volumes-from some-volume-container-v /docker/host/dir:/data参数。

docker run --name some-redis -d redis redis-server --appendonly yes

要使用redis-cli连接Redis服务器,使用下面的命令。

docker run -it --link some-redis:redis --rm redis redis-cli -h redis -p 6379

详细配置可以参考Docker官方文档

配置Redis

redis.conf

在Linux下,Redis的配置文件默认在/etc/redis.conf(可能根据操作系统不同而产生变化)。配置文件有很多注释,仔细阅读之后我们就可以配置Redis了。完整的样例文件可以看这里,techstay/redis.conf。文件看起来很大,其实大部分都是注释,实际配置并不多。

下面来简单介绍一些比较重要的配置。由于我也是刚刚开始学习Redis,所以不会介绍后面的高级配置,这里只介绍最基本最重要的配置。

单位换算

如果需要设置Redis的内存大小和文件大小,就需要设置具体的数值。单位换算按照下面的进制进行换算,不带b的是1000进制,带b的是1024进制。存储单位不区分大小写,所以gbgBGB等单位都是相同的。

# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes

IP地址

bind配置Redis服务器所绑定的IP地址,默认情况下是本地回环地址。如果不指定的话,Redis就会运行在所有网络接口上。

bind 127.0.0.1

不过需要注意,绑定到所有接口可能会引起安全问题。所以考虑到安全问题,最好让Redis只绑定固定的几个接口。

保护模式

Redis可以运行在保护模式,这需要显示将保护模式打开。

protected-mode yes

如果保护模式打开,并且:1)没有显式使用bind绑定具体的IP地址;2)没有设置密码,那么Redis只会监听本地IPv4和IPv6的回环地址(127.0.0.1::1)以及Unix Domain Sockets。

端口号

默认端口号是6379,如果需要较高的安全性也可以自定义端口号。

port 6379

客户端超时

当客户端在指定时间(单位:)内没有任何动作时,Redis就会断开连接。默认是0,表示不断开。

timeout 0

TCP连接存货时间

这个参数指定TCP连接会保持多少秒,默认是300秒。

tcp-keepalive 300

守护模式

指定Redis是否以守护模式运行。

daemonize no

日志打印

先说说日志级别,有debugverbosenoticewarning四种日志级别,显示的信息从多到少。如果需要调试的话,使用前两种日志级别,如果需要在生产环境中使用,推荐使用后两种级别。默认值是notice

loglevel notice

还可以指定日志文件的位置,如果不指定的话,默认会直接在控制台输出日志信息。如果Redis作为守护模式运行,而且没有指定日志文件位置, 那么日志会输出到/dev/null

logfile ""

保存到文件

可以设置Redis定期将内存数据保存到文件,以免服务器关闭之后文件丢失。在这里可以设置多个值,例如下面第一行表示每隔900秒,如果至少有1个键发生改变则保存数据;第三行表示每隔60秒,如果至少10000个键发生改变则保存数据。

save 900 1
save 300 10
save 60 10000

密码

使用密码可以提高Redis服务器的安全性。需要注意,由于Redis的高性能特性,一个用户一秒钟最高可以尝试15万次密码。所以为了保证安全性,密码需要尽量设置的长一些。

requirepass foobared

配置文件还有其他一些配置,我就不介绍了。如果需要更详细的配置可以直接查看配置文件的注释,对于每个配置项都有详细的介绍。

Docker配置

Docker的Redis镜像没有redis.conf文件,如果你需要这个文件来配置Redis,可以自己打包一个包含redis.conf的镜像。这需要编写类似下面这样的Dockerfile

FROM redis
COPY redis.conf /usr/local/etc/redis/redis.conf
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]

当然其实完全不用这么麻烦,直接在启动Redis镜像的时候就可以指定配置文件的位置。这种办法比较灵活,而且很简单,所以如果没有特别需求的话这样就可以了。

docker run -v /myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf --name myredis redis redis-server /usr/local/etc/redis/redis.conf

使用Redis

redis-cli

首先来介绍一下Redis的命令行工具redis-cli,我们对Redis服务器进行操作主要通过它来进行。

如果要查看帮助信息,可以使用redis-cli --help命令,下面列出了一部分输出。

# redis-cli --help
redis-cli 3.2.8

Usage: redis-cli [OPTIONS] [cmd [arg [arg ...]]]
  -h <hostname>      Server hostname (default: 127.0.0.1).
  -p <port>          Server port (default: 6379).
  -s <socket>        Server socket (overrides hostname and port).
  -a <password>      Password to use when connecting to the server.

如果主机名和端口号都是默认值的话,可以直接输入redis-cli进入交互式界面。如果需要连接到其他主机上的Redis服务器,可以使用-h参数指定主机名,使用-p参数指定端口号,使用-a参数指定密码。

# redis-cli
127.0.0.1:6379>

Redis命令

进入交互式界面之后,我们可以使用Redis提供的各种命令操作服务器了。Redis的命令有很多,作用也各不相同。大家可以到Redis Command查看所有命令和用途。如果不喜欢英文的话,可以查看Redis 命令参考,这是汉化过的命令文档。

存取数据

这里我就列举一些常用的命令。首先是存取命令,使用set 键 值来保存一个数据,保存成功后会返回OK

127.0.0.1:6379> set fuck fuck
OK

保存之后,可以使用get 键来获取这个值。

127.0.0.1:6379> get fuck
"fuck"

查询键

keys 模式用于查询符合模式的键的名字,支持的查询方式是GLOB类型的,支持*?[a-b][^a]等通配符。

127.0.0.1:6379> keys *
1) "fuck"
2) "food_num"

配置Redis

和存取命令类似,还有config getconfig set用于获取和设置配置文件中的配置。比如说,要获取配置文件的所有值,使用下面的命令。

127.0.0.1:6379> config get *

再比如,如果要设置Redis的登录密码,可以这么做。然后退出redis-cli并重新连接,即可生效。

127.0.0.1:6379> config set requirepass 123456

认证

如果Redis服务器设置了密码,在进行任何操作之前都需要认证才能进行,否则会提示NOAUTH

127.0.0.1:6379> get food_num
(error) NOAUTH Authentication required.

这时候需要使用auth命令进行认证,才能继续操作。

127.0.0.1:6379> auth 123456

当然,也可以直接在redis-cli连接的时候使用-a参数指定密码。

redis-cli -a 123456

超时和持久

可以使用expire命令为一个键设置超时值(单位:秒),在这里时间之后该值会被删除。

127.0.0.1:6379> expire fuck 10
(integer) 1

如果10秒之后再次查看该值,会发现已经不存在了。

127.0.0.1:6379> get fuck
(nil)

相应的,还有persist命令,会将该数据的超时值取消,这样只要数据库还在,这个数据就会一直存在。

127.0.0.1:6379> persist fuck
(integer) 0

除了使用expire命令为已存在的值设置超时值,还可以在设置数据的时候直接指定超时值。

set key 100 ex 10

在指定了超时值之后,可以使用ttl命令查看距离超时值还剩多少时间。

127.0.0.1:6379> ttl fuck
(integer) 17

退出

最后,可以使用quit命令退出命令行界面。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,598评论 18 139
  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,508评论 15 147
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,739评论 6 342
  • 焦文英 笔者是一名银行的个贷客户经理,在工作中,几乎每个客户都十分关心还款方式,等额本息和等额本金,究竟哪种更实惠...
    辉夏阅读 14,641评论 0 0
  • 酷暑难忍 。。。 初伏梦幻水床柔情声,潺潺沥水清幽幽 。。。 中伏幻想手握冰淇淋,绿荫树下秋千荡 。。。 末伏只恨...
    画欣阅读 267评论 0 1