背景
为了解决公司产品数据增长过快,初始化太耗费时间的问题,决定使用redis作为缓存服务器。
这是redis官网上原文,官方不支持windows,但是微软开放小组提供了一个windows版本的redis,仅支持64位版本。虽然可以根据需要从源代码构建32位版本。
Windows下的安装与配置
参考文章:http://www.runoob.com/redis/redis-install.html
下载
下载地址:https://github.com/MicrosoftArchive/redis/releases
下载一个压缩包 Redis-x64-3.2.100.zip。
安装
然后解压到你的安装盘。比如我是解压到了F盘,所以需要先切换到F盘
切换到安装盘
F:
进入到解压完的目录
cd Redis-x64-3.2.100-windows64
执行启动命令
redis-server.exe redis.windows.conf
这时候另启一个cmd窗口,原来的不要关闭,不然就无法访问服务端了。
切换到redis目录下运行
redis-cli.exe -h 127.0.0.1 -p 6379
如果ip和端口都没变也可以直接运行 redis-cli.exe。这样就打开了redis客户端了,可以执行一些命令了。
使用
设置键值对 set wang bo
取出键值对 get wang
测试安装完成,还是比较简单的。
Linux下的安装与配置
下载
官网地址:https://redis.io/download
将在官网上下载的redis压缩包redis-3.2.5.tar.gz通过ftp直接上传到了linux的site目录下。
安装
然后我是通过xshell5工具操作的linux。
进入site目录下
进行解压缩并覆盖
解压完后site下会出现解压后的redis-3.2.5文件夹,进入到这个文件夹下
执行make命令,对解压后的文件进行编译
编译完之后redis-3.2.5文件夹下会出现src文件夹和 redis.conf 配置文件,src下面会有相应的命令。
启动
进入src目录,执行 redis-server,启动redis服务,下面是启动成功的截图
注意:这里直接执行 redis-server 启动的Redis服务,是在前台直接运行的(效果如上图)。
也就是说,执行完该命令后,如果Lunix关闭当前会话,则Redis服务也随即关闭(如下图所示,我点击了 Ctrl+C,Redis 服务就关闭了。
redis服务已经关闭,这时候我运行 redis-cli 客户端会提示无法连接。
一般情况下,启动Redis服务需要从后台启动,并且指定启动配置文件。
配置
Redis的配置主要是通过修改 redis.conf 这个文件完成的,下面的操作都是在 redis.conf 里面进行。
更多配置可参考:Redis 配置内容总结
(1) 把前台启动修改为后台启动:
把daemonize no 改成 daemonize yes,表示后台启动,这个修改是为了防止启动 Redis 后直接 Ctrl+C 就会终止 Redis 运行。
现在重新启动redis服务并加载指定的配置文件,启动成功
(2) 修改本地访问为局域网访问:
如果想要把只允许本地访问改成允许远程访问(局域网内),将bind 127.0.0.1改为 bind 0.0.0.0,这样的话在项目里配置的redis地址直接写的就是redis所在linux服务器的IP。
如果改为内网IP,比如改为bind 192.168.0.2,这样内网项目访问的时候需要直接访问这里配置的IP。
(3) 修改本地访问为外部网络访问:
如果想要外部网络访问,注释掉bind 127.0.0.1,可以使所有的 ip 访问 redis,在 redis3.2 之后还需要把 protected-mode yes 改为 protected-mode no
(4) 设置密码:
# requirepass foobared,将这段代码注释去掉,设置密码,比如改成 requirepass mypassword
修改了密码和ip之后启动客户端就需要带上ip,端口和密码了:
命令
更多命令请参考这篇博客:Redis 客户端命令总结
启动redis服务
先进入到redis安装目录下的src目录
cd xxxx/redis-4.0.1/src
启动redis服务并加载指定的配置文件
./redis-server ../redis.conf
连接redis客户端
这里设置了密码,没设置的话不需要带密码
./redis-cli -a mypassword
如果设置了ip地址的话,就需要带上ip,端口,密码
./redis-cli -h 192.168.0.1 -p 6379 -a mypassword
客户端操作命令
set key value 设置键值对
get key 获取value值
exists key 确认一个key是否存在
keys * 查看所有的key
del key 删除一个key
flushdb 删除当前选择数据库中的所有key
退出客户端
exit
关闭redis服务
ps -ef|grep 6379 查看redis端口6379的进程号
kill -9 xxxx 杀掉对应进程号
遇到的问题:
1、/bin/sh: cc: command not found
提示gcc和cc命令令未找到。解决方法:
yum -y install gcc gcc-c++ libstdc++-devel
2、jemalloc/jemalloc.h: No such file or directory
网上大部分解决办法都是错误的:
make MALLOC=libc
正确解决办法(针对2.2以上的版本)。清理上次编译残留文件,重新编译:
make distclean && make
错误的本质是我们在开始执行 make 时遇到了错误(大部分是由于gcc未安装),然后我们安装好了gcc 后,我们再执行make ,这时就出现了jemalloc/jemalloc.h: No such file or directory。这是因为上次的编译失败,有残留的文件,我们需要清理下,然后重新编译就可以了。
网上的解决办法虽然最后也是可以成功安装好 redis,但是是有一些隐患的,首先我们要知道 redis 需要使用内存分配器的, make MALLOC=jemalloc 就是指定内存分配器为 jemalloc ,make MALLOC=libc 就是指定内存分配器为 libc ,这个是有安全隐患的,jemalloc 内存分配器在实践中处理内存碎片是要比 libc 好的,而且在README.md 文档也说明到了,jemalloc内存分配器也是包含在源码包里面的,可以在 deps 目录下看到 jemalloc 目录。