初探Redis
前言
redis是一种特殊类型的数据库,采用键值对形式存储数据,是一个不错的持久化缓存系统,之前写的一个SSM练习项目使用了mysql作为数据持久化方案,但是,对于一些重复的固定内容访问,每一次从查询指令到从数据库取值,这种不必要的步骤总显得有些碍眼,于是我选择使用redis作为中间的过渡方案。于是,便有了我redis的初体验之旅,之中踩坑无数,真是刚填平一个又踏入另一个。而且在网上查找了无数资源,翻阅了数不清的博客后,真的没有发现一篇全面的redis入门指南,于是便有了这篇文章的诞生,总结记录这一路的坑~
–
一.下载和安装
本来是在本地测试项目的,所以一开始打算就在自己电脑上装好redis进行试验,于是到了官网:
选择stable版本,download,下载好是个.tar.gz文件,之后在windows命令窗口搞鼓了一阵,发现别人的安装指令怎么输入都不起作用,仔细观察后,人家的指令运行的都是.exe文件,我在解压后的目录找到指令都是未知文件类型。。。 后来才发现,官网只提供linux版本的下载,,瞬间就觉得这官网不给版本选择真是巨坑。
于是,干脆直接装到服务器上,以后其他项目什么也可以用一下,直接把下载的压缩包拖到服务器。发现download页面有安装说明:
基本照做便OK了,由于redis是用C语言编写的(安装需要gcc环境),所有整个过程看似十分简单。但是这里使用的是默认配置,到真正能正常使用,还有很多东西需要自己配置。
二.配置Redis
redis的基本配置都是放在根目录的redis.conf文件里面,通过src目录下的
1 | # redis-server |
只是按默认配置启动,在centos上这种启动是前台式的启动,即启动后你不能进行其他操作,这肯定是不行的,所以还得自己去手动配置,
1.修改后台启动模式
通过 vim redis-conf 进行配置文件的编辑,修改其中
1 | # By default Redis does not run as a daemon. Use 'yes' if you need it. |
daemonize 为yes,即让redis以后台进程模式启动
2.设置密码
redis默认是没有密码的,启动后可直接访问,所以需要进行密码设置找到
1 | #requirepass foobared |
将注释去掉,再把foobared改为自己的密码即可。
此时,在 redis目录下,在 /src 下执行
1 | redis-server /redis.conf的路径 |
即可按redis.conf进行启动。
此时在 src目录下,以 redis-cli -a “password” 即可登录redis服务。
3.设置为开机启动
因为我发现redis的命令集中并没有方便的关闭和重启指令,于是,将其配置为后台服务。
1)在/etc目录下创建redis目录
1 | [root@ggb etc]# mkdir redis |
2)将原来的redis.conf拷贝到该目录下,并命名为6379.conf
1 | [root@ggb etc]# cp /usr/local/redis-4.0.11/redis.conf /etc/redis/6379.conf |
3)将redis的启动脚本复制一份到/etc/init.d目录下
1 | [root@ggb etc]#cp /usr/local/redis-4.0.11/utils/redis_init_script /etc/init.d/redisd |
4)设置开机自启,先切换到/etc/init.d目录下
1 | [root@ggb init.d]# chkconfig redisd on |
此时便完成了自启配置,同时也可以以服务的方式启动和关闭redis
1 | [root@ggb src]# service redisd start |
然后关闭指令
1 | [root@ggb src]#service redisd stop |
嗯….又是一个坑,在配置了密码后,redis服务开启可直接开启,但是关闭又需要密码,于是进入启动模板文件redisd修改启动配置
1 | stop) |
在 $CLIEXEC -p $REDISPORT shutdown 一句中加上-a “password”,现在便可以直接通过 service redisd stop 指令关闭服务了。
三.Jedis测试连接
redis可以连接多种语言,jedis是其官方推荐的java连接api,写测试方法如下:
1 | @Test |
结果当然没想象那么容易,返回报错如下:
1 | redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect timed out |
嗯,仔细看看代码,没有输入密码,不过网上别人没输入密码报错是这样的:
1 | redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication required. |
总感觉有地方配置可能还是出错的,于是又在网上到处找解决办法。
很久之后,无意间翻到一篇博客,redis还要手动开启远程访问….
#vim 6379.conf 继续修改配置文件,找到
1 | bind 127.0.0.1 |
嗯,redis的默认配置是绑定了127.0.0.1 ip的… 注释掉这句,通过这个功能可以实现redis指定ip访问,在某些时候其实还是挺有用的。然后再找到
1 | # When protected mode is on and if: |
上面注释已经说的很清楚了,但保护模式开启时,如果没有密码设定,也没有绑定Ip,redis也会自动锁定访问ip。所以,设置为no。
再进行一波测试:
1 | @Test |
终于,测试通过了。
Connection to server sucessfully
Server is running: PONG
四.总结
开始安装好redis本来以为很快就能用,开始我的缓存优化时,一连串的问题接踵而来。以至于耗费了我小半天的功夫才把这一堆配置给调通,之后便是redis的实践测试。有兴趣的可以前往我的github,查看seckill这一项目,里面有redis的实践应用。