Redis是一个开源的利用ANSI C说话编写、遵守BSD和谈、撑持收集、可基于内存亦可持久化的日记型、Key-Value数据库,并供给多种说话的API
35建立一个入门springboot项目(controller层)
Maven依靠引入:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
首先在你的SpringBoot工程中找到你的 application.properties 文件。
标的目的里面添加如下设置装备摆设:
#-------------------------------------Redis设置装备摆设信息start----------------------#指定几号数据库spring.redis.database = 0#Redis办事器地址spring.redis.host = localhost#Redis办事器毗连端口spring.redis.port = 6379# Redis办事器毗连密码(默认为空)spring.redis.password = # 毗连超不时间(毫秒)spring.redis.timeout = 5000# 毗连池最年夜毗连数(利用负值暗示没有限制)spring.redis.jedis.pool.max-active=600# 毗连池最年夜梗阻期待时候(利用负值暗示没有限制)spring.redis.jedis.pool.max-wait=1000# 毗连池中的最年夜余暇毗连spring.redis.jedis.pool.max-idle=8# 毗连池中的最小余暇毗连spring.redis.jedis.pool.min-idle=0#-------------------------------------Redis设置装备摆设信息end----------------------
然后写一个RedisUtils的东西类,网上良多粘一个就行,这里我只是简单的放了几个方式。
@Componentpublic class RedisUtils { @Resource private RedisTemplate<String, String> redisTemplate; /** * 指定缓存掉效时候 * * @param key 键 * @param time 时候(秒) * @return */ public boolean expire(String key, long time) { try { if (time > 0) { redisTemplate.expire(key, time, TimeUnit.SECONDS); } return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 按照key 获取过时时候 * * @param key 键 不克不及为null * @return 时候(秒) 返回0代表为永远有用 */ public long getExpire(String key) { return redisTemplate.getExpire(key, TimeUnit.SECONDS); } /** * 判定key是否存在 * * @param key 键 * @return true 存在 false不存在 */ public boolean hasKey(String key) { try { return redisTemplate.hasKey(key); } catch (Exception e) { e.printStackTrace(); return false; } } /** * 删除缓存 * * @param key 可以传一个值 或多个 */ @SuppressWarnings("unchecked") public void del(String... key) { if (key != null && key.length > 0) { if (key.length == 1) { redisTemplate.delete(key[0]); } else { redisTemplate.delete(CollectionUtils.arrayToList(key)); } } } //============================String============================= /** * 通俗缓存获取 * * @param key 键 * @return 值 */ public Object get(String key) { return key == null ? null : redisTemplate.opsForValue().get(key); } /** * 通俗缓存放入 * * @param key 键 * @param value 值 * @return true当作功 false掉败 */ public boolean set(String key, String value) { try { redisTemplate.opsForValue().set(key, value); return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 通俗缓存放入并设置时候 * * @param key 键 * @param value 值 * @param time 时候(秒) time要年夜于0 若是time小于等于0 将设置无期限 * @return true当作功 false 掉败 */ public boolean set(String key, String value, long time) { try { if (time > 0) { redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS); } else { set(key, value); } return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 递增 * * @param key 键 * @param delta 要增添几(年夜于0) * @return */ public long incr(String key, long delta) { if (delta < 0) { throw new RuntimeException("递增因子必需年夜于0"); } return redisTemplate.opsForValue().increment(key, delta); } /** * 递减 * * @param key 键 * @param delta 要削减几(小于0) * @return */ public long decr(String key, long delta) { if (delta < 0) { throw new RuntimeException("递减因子必需年夜于0"); } return redisTemplate.opsForValue().increment(key, -delta); }}
然后。。。。然后就可以了啊简单吧。可是没有那么简单
上面我们写的是0号的数据库,此刻我们测试利用的是3号数据库(大师在用的时辰按照营业需求就好)
我们写一个测试类用来添加:存入一个
key=ceshi001
value=123456
的值
然后我们去看Redis数据库中是什么,看图为什么酿成如许了呢。
可是到此我们发现,Redis已经集当作当作功可以进行存储了。
我们来解决key值的问题:其实就是序列化的问题
我们来成立一个RedisConfiguration的类,下面显示格局可能不合错误,直接粘贴利用就好。可是序列化的体例也有良多,可以自行百度。
@Configurationpublic class RedisConfiguration { @Bean public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory redisFactory){ StringRedisTemplate template = new StringRedisTemplate(redisFactory); JdkSerializationRedisSerializer jdkSerializationRedisSerializer=new JdkSerializationRedisSerializer(); template.setValueSerializer(jdkSerializationRedisSerializer); template.afterPropertiesSet(); return template; }
}
好我们再去运行一次:
发现此次对了。
其实就是序列化的问题,若是不写会有默认的序列化体例
所以开辟中若是碰到有两个工程中,去取统一个key值取到简直实null
不消质疑你的Redis有问题,也不消质疑为什么别人能拿到。
那就是key的序列化问题,你们的序列化体例要同一。
(再说一下,一般公司开辟会同一的不会碰到如许的问题,若是碰到了申明你们的开辟不同一)
0 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!