Error message here!

Hide Error message here!

忘记密码?

Error message here!

请输入正确邮箱

Hide Error message here!

密码丢失?请输入您的电子邮件地址。您将收到一个重设密码链接。

Error message here!

返回登录

Close

Windows环境下springboot集成redis的安装与使用

队长给我球。 2019-02-26 16:36:00 阅读数:181 评论数:0 点赞数:0 收藏数:0

 一,redis安装

首先我们需要下载Windows版本的redis压缩包地址如下:

https://github.com/MicrosoftArchive/redis/releases

连接打开后如下图所示

 

我们选择64位的压缩包,下载后需要解压,我们解压至D盘,如下图所示:

接下来我们需要执行一些安装命令

1,在如上图的目录中,直接键入“cmd

2,在打开的cmd命令窗口中输入 “redis-server.exe redis.windows.conf” 用于启动redis服务

(注意采用这个命令相当于启动一个临时服务,如果当前窗口被关闭,则服务也会被关闭)

3,我们再打开一个同样的cmd命令窗口,在其中键入 “redis-cli” ,这个命令的作用是启动一个redis客户端。客户端默认的端口号是6379 如果我们要修改端口号,需要打开我们前面执行的命令中的conf文件redis.windows.conf 找到port 修改其后的端口号

4,在启动的客户端中检查redis服务是否正常,我们可以进行数据的设置和读取等操作,比如我们可以执行一个命令 “set redis jj”,然后我们再执行一个命令“get redis” 就可以将前面设置的123 查询出来 ,如下图所示

5,将redis服务注册到我们的Windows,我们继续新打开一个cmd窗口,执行命令 “redis-server --service-install redis.windows.conf” 这个时候呢,提示:Redis successfully installed as a service. 表示加入服务成功!

6,启动注册到Windows的redis服务。键入命令“redis-server.exe  --service-start”  可能会报错,如下图。原因是我们已经在这个端口绑定了一个服务,就是我们前面启动的那个所谓的临时服务,这个时候我们需要关闭刚才启动的临时服务的窗口。

 7,再启动如果还是报上面的错误,那可能需要我们调整注册到Windows的服务为本地系统服务,而不是网络服务,如下图所示。除此之外可能还会有防火墙等问题导致redis服务启动失败。

8,如下图所示,服务启动ok,这个时候我们在继续操作redis客户端是没有问题的。

二,springboot 集成redis

1,新建springboot工程,如果有不清楚如何新建的,请移步 https://www.cnblogs.com/JJJ1990/p/8384386.html

2,在pom文件中加入redis jar包的引用

我的整个工程的pom文件如下,注意第34-38行,即为引入的redis jar包1 3 4.0.0 4 5 com 6 redis 7 0.0.1-SNAPSHOT 8 jar 9 10 redis 11 http://maven.apache.org 12 13 14 UTF-8 15 16 17 18 org.springframework.boot 19 spring-boot-starter-parent 20 1.5.8.RELEASE 21 22 23 24 25 junit 26 junit 27 3.8.1 28 test 29 30 31 org.springframework.boot 32 spring-boot-starter-web 33 34 35 org.springframework.boot 36 spring-boot-starter-data-redis 37 38 39

3,编写RedisConfig 类代码

1 packagecom.redis;2 3 importorg.springframework.beans.factory.annotation.Value;4 importorg.springframework.context.annotation.Bean;5 importorg.springframework.context.annotation.Configuration;6 importorg.springframework.context.annotation.PropertySource;7 importorg.springframework.data.redis.connection.RedisConnectionFactory;8 importorg.springframework.data.redis.connection.jedis.JedisConnectionFactory;9 importorg.springframework.data.redis.core.RedisTemplate;10 importorg.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;11 importorg.springframework.data.redis.serializer.StringRedisSerializer;12 13 importredis.clients.jedis.JedisPoolConfig;14 15 @Configuration16 @PropertySource("classpath:config/redis.properties")17 public classRedisConfig {18 19 @Value("${redis.maxIdle}")20 privateInteger maxIdle;21 22 @Value("${redis.maxTotal}")23 privateInteger maxTotal;24 25 @Value("${redis.maxWaitMillis}")26 privateInteger maxWaitMillis;27 28 @Value("${redis.minEvictableIdleTimeMillis}")29 privateInteger minEvictableIdleTimeMillis;30 31 @Value("${redis.numTestsPerEvictionRun}")32 privateInteger numTestsPerEvictionRun;33 34 @Value("${redis.timeBetweenEvictionRunsMillis}")35 private longtimeBetweenEvictionRunsMillis;36 37 @Value("${redis.testOnBorrow}")38 private booleantestOnBorrow;39 40 @Value("${redis.testWhileIdle}")41 private booleantestWhileIdle;42 43 44 @Value("${spring.redis.cluster.nodes}")45 privateString clusterNodes;46 47 @Value("${spring.redis.cluster.max-redirects}")48 privateInteger mmaxRedirectsac;49 50 /// 51 / JedisPoolConfig 连接池52 /@return 53 // 54 @Bean55 publicJedisPoolConfig jedisPoolConfig() {56 JedisPoolConfig jedisPoolConfig = newJedisPoolConfig();57 //最大空闲数 58 jedisPoolConfig.setMaxIdle(maxIdle);59 //连接池的最大数据库连接数 60 jedisPoolConfig.setMaxTotal(maxTotal);61 //最大建立连接等待时间 62 jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);63 //逐出连接的最小空闲时间 默认1800000毫秒(30分钟) 64 jedisPoolConfig.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);65 //每次逐出检查时 逐出的最大数目 如果为负数就是 : 1/abs(n), 默认3 66 jedisPoolConfig.setNumTestsPerEvictionRun(numTestsPerEvictionRun);67 //逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1 68 jedisPoolConfig.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);69 //是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个 70 jedisPoolConfig.setTestOnBorrow(testOnBorrow);71 //在空闲时检查有效性, 默认false 72 jedisPoolConfig.setTestWhileIdle(testWhileIdle);73 System.out.println("redis 连接池配置完成!");74 returnjedisPoolConfig;75 }76 /// 77 / 单机版配置78 /@throws 79 // 80 @Bean81 publicJedisConnectionFactory JedisConnectionFactory(JedisPoolConfig jedisPoolConfig){82 JedisConnectionFactory JedisConnectionFactory = newJedisConnectionFactory(jedisPoolConfig);83 //连接池 84 JedisConnectionFactory.setPoolConfig(jedisPoolConfig);85 //IP地址 86 JedisConnectionFactory.setHostName("127.0.0.1");87 //端口号 88 JedisConnectionFactory.setPort(6379);89 //如果Redis设置有密码90 //JedisConnectionFactory.setPassword(password);91 //客户端超时时间单位是毫秒 92 JedisConnectionFactory.setTimeout(5000);93 System.out.println("jedis 连接工厂配置完成!");94 returnJedisConnectionFactory;95 }96 97 /// 98 / 实例化 RedisTemplate 对象99 /@return 100 // 101 @Bean102 public RedisTemplatefunctionDomainRedisTemplate(JedisConnectionFactory redisConnectionFactory) {103 RedisTemplate redisTemplate = new RedisTemplate();104 initDomainRedisTemplate(redisTemplate, redisConnectionFactory);105 System.out.println("functionDomainRedisTemplates 配置完成!");106 returnredisTemplate;107 }108 /// 109 / 设置数据存入 redis 的序列化方式,并开启事务110 /@paramredisTemplate111 /@paramfactory112 // 113 private void initDomainRedisTemplate(RedisTemplateredisTemplate, RedisConnectionFactory factory) {114 //如果不配置Serializer,那么存储的时候缺省使用String,如果用User类型存储,那么会提示错误User can't cast to String! 115 redisTemplate.setKeySerializer(newStringRedisSerializer());116 redisTemplate.setHashKeySerializer(newStringRedisSerializer());117 redisTemplate.setHashValueSerializer(newGenericJackson2JsonRedisSerializer());118 redisTemplate.setValueSerializer(newGenericJackson2JsonRedisSerializer());119 //开启事务 120 redisTemplate.setEnableTransactionSupport(true);121 redisTemplate.setConnectionFactory(factory);122 }123 /// 124 / 注入封装RedisTemplate125 / @Title: redisUtil126 /@returnRedisUtil127 /@throws 128 // 129 @Bean(name = "redisUtil")130 public RedisUtil redisUtil(RedisTemplateredisTemplate) {131 RedisUtil redisUtil = newRedisUtil();132 redisUtil.setRedisTemplate(redisTemplate);133 System.out.println("redisUtil 配置完成!");134 returnredisUtil;135 }136 }

4,编写RedisUtil类,用于操作redis数据库

1 packagecom.redis;2 3 importjava.util.List;4 importjava.util.Map;5 importjava.util.Set;6 importjava.util.concurrent.TimeUnit;7 8 importorg.springframework.data.redis.core.RedisTemplate;9 importorg.springframework.util.CollectionUtils;10 11 public classRedisUtil {12 13 private RedisTemplateredisTemplate;14 15 public void setRedisTemplate(RedisTemplateredisTemplate) {16 this.redisTemplate =redisTemplate;17 }18 19 /// 20 / 指定缓存失效时间21 /@paramkey 键22 /@paramtime 时间(秒)23 /@return 24 // 25 public boolean expire(String key,longtime){26 try{27 if(time>0){28 redisTemplate.expire(key, time, TimeUnit.SECONDS);29 }30 return true;31 } catch(Exception e) {32 e.printStackTrace();33 return false;34 }35 }36 37 /// 38 / 根据key 获取过期时间39 /@paramkey 键 不能为null40 /@return时间(秒) 返回0代表为永久有效41 // 42 public longgetExpire(String key){43 returnredisTemplate.getExpire(key,TimeUnit.SECONDS);44 }45 46 /// 47 / 判断key是否存在48 /@paramkey 键49 /@returntrue 存在 false不存在50 // 51 public booleanhasKey(String key){52 try{53 returnredisTemplate.hasKey(key);54 } catch(Exception e) {55 e.printStackTrace();56 return false;57 }58 }59 60 /// 61 / 删除缓存62 /@paramkey 可以传一个值 或多个63 // 64 @SuppressWarnings("unchecked")65 public voiddel(String ... key){66 if(key!=null&&key.length>0){67 if(key.length==1){68 redisTemplate.delete(key[0]);69 }else{70 redisTemplate.delete(CollectionUtils.arrayToList(key));71 }72 }73 }74 75 //============================String============================= 76 //*/* 77 /* 普通缓存获取78 /*@paramkey 键79 /*@return值80 /*/ 81 publicObject get(String key){82 return key==null?null:redisTemplate.opsForValue().get(key);83 }84 85 //*/* 86 /* 普通缓存放入87 /*@paramkey 键88 /*@paramvalue 值89 /*@returntrue成功 false失败90 /*/ 91 public booleanset(String key,Object value) {92 try{93 redisTemplate.opsForValue().set(key, value);94 return true;95 } catch(Exception e) {96 e.printStackTrace();97 return false;98 }99 100 }101 102 //*/* 103 /* 普通缓存放入并设置时间104 /*@paramkey 键105 /*@paramvalue 值106 /*@paramtime 时间(秒) time要大于0 如果time小于等于0 将设置无限期107 /*@returntrue成功 false 失败108 /*/ 109 public boolean set(String key,Object value,longtime){110 try{111 if(time>0){112 redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);113 }else{114 set(key, value);115 }116 return true;117 } catch(Exception e) {118 e.printStackTrace();119 return false;120 }121 }122 123 //*/* 124 /* 递增125 /*@paramkey 键126 /*@paramby 要增加几(大于0)127 /*@return 128 /*/ 129 public long incr(String key, longdelta){130 if(delta<0){131 throw new RuntimeException("递增因子必须大于0");132 }133 returnredisTemplate.opsForValue().increment(key, delta);134 }135 136 //*/* 137 /* 递减138 /*@paramkey 键139 /*@paramby 要减少几(小于0)140 /*@return 141 /*/ 142 public long decr(String key, longdelta){143 if(delta<0){144 throw new RuntimeException("递减因子必须大于0");145 }146 return redisTemplate.opsForValue().increment(key, -delta);147 }148 149 //================================Map================================= 150 //*/* 151 /* HashGet152 /*@paramkey 键 不能为null153 /*@paramitem 项 不能为null154 /*@return值155 /*/ 156 publicObject hget(String key,String item){157 returnredisTemplate.opsForHash().get(key, item);158 }159 160 //*/* 161 /* 获取hashKey对应的所有键值162 /*@paramkey 键163 /*@return对应的多个键值164 /*/ 165 public Maphmget(String key){166 returnredisTemplate.opsForHash().entries(key);167 }168 169 //*/* 170 /* HashSet171 /*@paramkey 键172 /*@parammap 对应多个键值173 /*@returntrue 成功 false 失败174 /*/ 175 public boolean hmset(String key, Mapmap){176 try{177 redisTemplate.opsForHash().putAll(key, map);178 return true;179 } catch(Exception e) {180 e.printStackTrace();181 return false;182 }183 }184 185 //*/* 186 /* HashSet 并设置时间187 /*@paramkey 键188 /*@parammap 对应多个键值189 /*@paramtime 时间(秒)190 /*@returntrue成功 false失败191 /*/ 192 public boolean hmset(String key, Map map, longtime){193 try{194 redisTemplate.opsForHash().putAll(key, map);195 if(time>0){196 expire(key, time);197 }198 return true;199 } catch(Exception e) {200 e.printStackTrace();201 return false;202 }203 }204 205 //*/* 206 /* 向一张hash表中放入数据,如果不存在将创建207 /*@paramkey 键208 /*@paramitem 项209 /*@paramvalue 值210 /*@returntrue 成功 false失败211 /*/ 212 public booleanhset(String key,String item,Object value) {213 try{214 redisTemplate.opsForHash().put(key, item, value);215 return true;216 } catch(Exception e) {217 e.printStackTrace();218 return false;219 }220 }221 222 //*/* 223 /* 向一张hash表中放入数据,如果不存在将创建224 /*@paramkey 键225 /*@paramitem 项226 /*@paramvalue 值227 /*@paramtime 时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间228 /*@returntrue 成功 false失败229 /*/ 230 public boolean hset(String key,String item,Object value,longtime) {231 try{232 redisTemplate.opsForHash().put(key, item, value);233 if(time>0){234 expire(key, time);235 }236 return true;237 } catch(Exception e) {238 e.printStackTrace();239 return false;240 }241 }242 243 //*/* 244 /* 删除hash表中的值245 /*@paramkey 键 不能为null246 /*@paramitem 项 可以使多个 不能为null247 /*/ 248 public voidhdel(String key, Object... item){249 redisTemplate.opsForHash().delete(key,item);250 }251 252 //*/* 253 /* 判断hash表中是否有该项的值254 /*@paramkey 键 不能为null255 /*@paramitem 项 不能为null256 /*@returntrue 存在 false不存在257 /*/ 258 public booleanhHasKey(String key, String item){259 returnredisTemplate.opsForHash().hasKey(key, item);260 }261 262 //*/* 263 /* hash递增 如果不存在,就会创建一个 并把新增后的值返回264 /*@paramkey 键265 /*@paramitem 项266 /*@paramby 要增加几(大于0)267 /*@return 268 /*/ 269 public double hincr(String key, String item,doubleby){270 returnredisTemplate.opsForHash().increment(key, item, by);271 }272 273 //*/* 274 /* hash递减275 /*@paramkey 键276 /*@paramitem 项277 /*@paramby 要减少记(小于0)278 /*@return 279 /*/ 280 public double hdecr(String key, String item,doubleby){281 return redisTemplate.opsForHash().increment(key, item,-by);282 }283 284 //============================set============================= 285 //*/* 286 /* 根据key获取Set中的所有值287 /*@paramkey 键288 /*@return 289 /*/ 290 public SetsGet(String key){291 try{292 returnredisTemplate.opsForSet().members(key);293 } catch(Exception e) {294 e.printStackTrace();295 return null;296 }297 }298 299 //*/* 300 /* 根据value从一个set中查询,是否存在301 /*@paramkey 键302 /*@paramvalue 值303 /*@returntrue 存在 false不存在304 /*/ 305 public booleansHasKey(String key,Object value){306 try{307 returnredisTemplate.opsForSet().isMember(key, value);308 } catch(Exception e) {309 e.printStackTrace();310 return false;311 }312 }313 314 //*/* 315 /* 将数据放入set缓存316 /*@paramkey 键317 /*@paramvalues 值 可以是多个318 /*@return成功个数319 /*/ 320 public longsSet(String key, Object...values) {321 try{322 returnredisTemplate.opsForSet().add(key, values);323 } catch(Exception e) {324 e.printStackTrace();325 return 0;326 }327 }328 329 //*/* 330 /* 将set数据放入缓存331 /*@paramkey 键332 /*@paramtime 时间(秒)333 /*@paramvalues 值 可以是多个334 /*@return成功个数335 /*/ 336 public long sSetAndTime(String key,longtime,Object...values) {337 try{338 Long count =redisTemplate.opsForSet().add(key, values);339 if(time>0) expire(key, time);340 returncount;341 } catch(Exception e) {342 e.printStackTrace();343 return 0;344 }345 }346 347 //*/* 348 /* 获取set缓存的长度349 /*@paramkey 键350 /*@return 351 /*/ 352 public longsGetSetSize(String key){353 try{354 returnredisTemplate.opsForSet().size(key);355 } catch(Exception e) {356 e.printStackTrace();357 return 0;358 }359 }360 361 //*/* 362 /* 移除值为value的363 /*@paramkey 键364 /*@paramvalues 值 可以是多个365 /*@return移除的个数366 /*/ 367 public longsetRemove(String key, Object ...values) {368 try{369 Long count =redisTemplate.opsForSet().remove(key, values);370 returncount;371 } catch(Exception e) {372 e.printStackTrace();373 return 0;374 }375 }376 //===============================list================================= 377 378 //*/* 379 /* 获取list缓存的内容380 /*@paramkey 键381 /*@paramstart 开始382 /*@paramend 结束 0 到 -1代表所有值383 /*@return 384 /*/ 385 public List lGet(String key,long start, longend){386 try{387 returnredisTemplate.opsForList().range(key, start, end);388 } catch(Exception e) {389 e.printStackTrace();390 return null;391 }392 }393 394 //*/* 395 /* 获取list缓存的长度396 /*@paramkey 键397 /*@return 398 /*/ 399 public longlGetListSize(String key){400 try{401 returnredisTemplate.opsForList().size(key);402 } catch(Exception e) {403 e.printStackTrace();404 return 0;405 }406 }407 408 //*/* 409 /* 通过索引 获取list中的值410 /*@paramkey 键411 /*@paramindex 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推412 /*@return 413 /*/ 414 public Object lGetIndex(String key,longindex){415 try{416 returnredisTemplate.opsForList().index(key, index);417 } catch(Exception e) {418 e.printStackTrace();419 return null;420 }421 }422 423 //*/* 424 /* 将list放入缓存425 /*@paramkey 键426 /*@paramvalue 值427 /*@paramtime 时间(秒)428 /*@return 429 /*/ 430 public booleanlSet(String key, Object value) {431 try{432 redisTemplate.opsForList().rightPush(key, value);433 return true;434 } catch(Exception e) {435 e.printStackTrace();436 return false;437 }438 }439 440 //*/* 441 /* 将list放入缓存442 /*@paramkey 键443 /*@paramvalue 值444 /*@paramtime 时间(秒)445 /*@return 446 /*/ 447 public boolean lSet(String key, Object value, longtime) {448 try{449 redisTemplate.opsForList().rightPush(key, value);450 if (time > 0) expire(key, time);451 return true;452 } catch(Exception e) {453 e.printStackTrace();454 return false;455 }456 }457 458 //*/* 459 /* 将list放入缓存460 /*@paramkey 键461 /*@paramvalue 值462 /*@paramtime 时间(秒)463 /*@return 464 /*/ 465 public boolean lSet(String key, Listvalue) {466 try{467 redisTemplate.opsForList().rightPushAll(key, value);468 return true;469 } catch(Exception e) {470 e.printStackTrace();471 return false;472 }473 }474 475 //*/* 476 /* 将list放入缓存477 /*@paramkey 键478 /*@paramvalue 值479 /*@paramtime 时间(秒)480 /*@return 481 /*/ 482 public boolean lSet(String key, List value, longtime) {483 try{484 redisTemplate.opsForList().rightPushAll(key, value);485 if (time > 0) expire(key, time);486 return true;487 } catch(Exception e) {488 e.printStackTrace();489 return false;490 }491 }492 493 //*/* 494 /* 根据索引修改list中的某条数据495 /*@paramkey 键496 /*@paramindex 索引497 /*@paramvalue 值498 /*@return 499 /*/ 500 public boolean lUpdateIndex(String key, longindex,Object value) {501 try{502 redisTemplate.opsForList().set(key, index, value);503 return true;504 } catch(Exception e) {505 e.printStackTrace();506 return false;507 }508 }509 510 //*/* 511 /* 移除N个值为value512 /*@paramkey 键513 /*@paramcount 移除多少个514 /*@paramvalue 值515 /*@return移除的个数516 /*/ 517 public long lRemove(String key,longcount,Object value) {518 try{519 Long remove =redisTemplate.opsForList().remove(key, count, value);520 returnremove;521 } catch(Exception e) {522 e.printStackTrace();523 return 0;524 }525 }526 }

5,新建 redis.properties 文件

注意文件位置,在我们新建RedisConfig 的时候有指定 为config/redis.properties ,所以我们的redis.properties 文件位置如下图所示

6,编写redis.properties 文件内容1 /#Matser的ip地址2 redis.hostName=172.0.0.1 3 /#端口号4 redis.port=6379 5 /#如果有密码6 redis.password= 7 /#客户端超时时间单位是毫秒 默认是20008 redis.timeout=10000 9 10 /#最大空闲数11 redis.maxIdle=300 12 /#连接池的最大数据库连接数。设为0表示无限制,如果是jedis 2.4以后用redis.maxTotal13 /#redis.maxActive=600 14 /#控制一个pool可分配多少个jedis实例,用来替换上面的redis.maxActive,如果是jedis 2.4以后用该属性15 redis.maxTotal=1000 16 /#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。17 redis.maxWaitMillis=1000 18 /#连接的最小空闲时间 默认1800000毫秒(30分钟)19 redis.minEvictableIdleTimeMillis=300000 20 /#每次释放连接的最大数目,默认321 redis.numTestsPerEvictionRun=1024 22 /#逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1 23 redis.timeBetweenEvictionRunsMillis=30000 24 /#是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个25 redis.testOnBorrow=true 26 /#在空闲时检查有效性, 默认false27 redis.testWhileIdle=true 28 29 /#redis集群配置30 spring.redis.cluster.nodes=192.168.177.128:7001,192.168.177.128:7002,192.168.177.128:7003,192.168.177.128:7004,192.168.177.128:7005,192.168.177.128:7006 31 spring.redis.cluster.max-redirects=3

7,编写测试controller 

1 packagecom.redis;2 3 importorg.springframework.beans.factory.annotation.Autowired;4 importorg.springframework.stereotype.Controller;5 importorg.springframework.web.bind.annotation.PathVariable;6 importorg.springframework.web.bind.annotation.RequestMapping;7 importorg.springframework.web.bind.annotation.RequestMethod;8 importorg.springframework.web.bind.annotation.ResponseBody;9 10 @Controller11 public classFirstblood {12 13 @Autowired14 RedisUtil redisUtil;15 16 @RequestMapping(value="/FristBlood/{name}",method=RequestMethod.GET)17 @ResponseBody18 public String hello(@PathVariable("name") String name) {19 return "查询结果:" +redisUtil.get(name) ;20 }21 }

8,测试验证

打开浏览器,输入 “http://localhost:8080/FristBlood/redis”  这个url中的redis就等于是我们本次请求要查询的key ,

但是这块有一个问题是,我们使用了@ResponseBody 注解,但是我们在redis数据库中,之前存入的时候,我们执行了一个命令"set redis jj" ,

虽然我们认为存入的是一个字符串但是在我们代码中执行获取这个key的value的时候不会这么认为,会导致解析出错。

这个时候我们从新set一下,如下图

然后在浏览器中我们继续输入上面的url,返回的结果页面如下,则说明整个工程ok

如果输入的key不存在 则返回null,如下图所示:

 

版权声明
本文为[队长给我球。]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/JJJ1990/p/10438292.html

编程之旅,人生之路,不止于编程,还有诗和远方。
阅代码原理,看框架知识,学企业实践;
赏诗词,读日记,踏人生之路,观世界之行;