第一次用SSM+Jedis搭建web项目,SSM引用之前随笔:,在这记录一下。
一、redis安装
这里不记录详细过程,只记录大概流程也就是比较重要的步骤。
1、redis推荐安装在Linux系统下,因此紧随潮流,安装虚拟机(VMware)、Linux系统(CentOS)。
2、电脑主系统是Windows因此为了方便,在Windows系统安装SecureCRT来链接Linux系统。
3、下载redis压缩包:
4、安装redis需要gcc环境,因此Linux系统中需要安装gcc环境:yum install gcc-c++
5、解压redis压缩包,安装redis:(命令突然想不起来了,以后有机会在补上吧)
6、安装redis完成后,这时启动redis是属于前端启动,说直白点就是启动后命令窗口就无法操作了(需Ctrl+c退出)。前端启动很不方便,因此需要设置成后端启动:
- 进入之前解压后redis的文件copy文件(redis.conf)到redis安装路径,(此处截图做个标记)
-
修改redis.conf文件 daemonize yes(大概在100+行):
- 最后测试, 注意命令需要携带redis.conf文件(不然它是不会解析redis.conf文件的): ./bin/redis-server ./redis.conf
二、pom.xml
添加Jedis的jar包,此处记录一下,之前报错的时候搜bug有一点意外收获:jedis包括2.4.1,2.5.1等高版本的JedisPoolConfig没有maxActive属性。
12 redis.clients 3jedis 42.9.0 5
三、redis.properties
redis配置有好多,我没有仔细查,只是记录一下各位前辈常用的一下配置
1 ########################## 2 ## redis缓存配置 3 ########################## 4 # redis主机IP 5 redis.host=redisIP地址 6 # redis端口 7 redis.port=6379 8 # 链接超时 9 # redis.timeout=200010 # 密码11 # redis.password=root12 # 指定redis数据库13 # redis.database=214 15 ##########################16 ## redis连接池配置17 ##########################18 # 最大连接数19 redis.maxTotal=3020 # 最大空闲连接数21 redis.maxIdle=1022 # 获取链接最大等待毫秒23 redis.maxWaitMillis=100024 # 获取链接时检查有效性25 redis.testOnBorrow=true26 27 # 在空闲时监测有效性28 # redis.testWhileIdle=true29 # 链接耗尽时是否阻塞30 # redis.blockWhenExhausted=true31 # 每次释放链接的最大数目32 # redis.numTestsPerEvictionRun=102433 # 释放链接的扫描间隔(毫秒)34 # redis.timeBetweenEvictionRunsMillis=3000035 # 最小空闲时间36 # redis.minEvictableIdleTimeMillis=180000037 # 链接空闲多久后释放38 # redis.softMinEvictableIdleTimeMillis=10000
四、applicationContext-Redis.xml
第一个项目不要多复杂,能跑起来就可以,所以没有配置过多。
1 25 6 7 8 10 11 129 13 14 22 23 2415 16 17 18 19 20 21 25 26 32 33 3427 28 29 30 31
五、单元测试
关键代码
1 @Test 2 public void testJedisClient() { 3 // 定义redis连接池 4 JedisPool jedisPool = null; 5 // 定义redis实例 6 Jedis jedis = null; 7 try { 8 // 映射redis配置文件 9 ApplicationContext applicationContext =10 new ClassPathXmlApplicationContext("classpath:applicationContext-Redis.xml");11 // 获取redis连接池12 jedisPool = (JedisPool) applicationContext.getBean("jedisPool");13 // 获取redis实例14 jedis = jedisPool.getResource();15 // 存值16 jedis.set("name", "rose");17 // 取值18 String name = jedis.get("name");19 // 输出控制台20 System.out.println(name);21 }catch (Exception e){22 e.printStackTrace();23 }finally {24 // 释放资源25 if(jedis != null)26 jedis.close();27 }28 if(jedisPool != null){29 jedisPool.close();30 }31 }
六、bug
写程序吗哪有不出bug的,记录一下:
解决方案:
首先这个异常中文的大概意思就是:无法从连接池中获取链接。
仔细一思考感觉不对啊,我才刚启动,怎么可能连接池就没链接呢。
于是百度,发现触发这个异常似乎有很多种情况,不过都和我的不匹配,不过最后终于凭借10几年的百度经验,还是找到了。
就是需要将redis.conf中的这个配置(protected-mode设为no),protected-mode是redis 3.2 之后加入的新特性,它的大概作用就是禁止公网访问redis cache。
接下来修改一下redis.conf,大概在redis.conf文件100行左右:
OK 成功了,嘿嘿嘿~~~