摘要:喜欢在内存操作,比在磁盘瞎忙高效多了,因此深受人们喜爱。数据结构有五种数据结构字符串哈希列表集合最常用的就是类型,通常使用它做缓存,减轻直接访问数据库的压力。的话可以用来做用户,可以用来做粉丝列表,的话可以做共同好友,可以做排行榜。
引入依赖
compile "org.springframework.boot:spring-boot-starter-data-redis"
使用redis有两种方法
1.Jedis
Jedis jedis = new Jedis("localhost");
2.RedisTemplate
@Autowired private RedisTemplate redisTemplate;
如果使用RedisTemplate的话,要在application.properties中配置信息,这里我使用Jedis比较简单
redis的自动配置在application.properties文件下
#redis的springboot的自动配置 # Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 spring.redis.host=127.0.0.1 # Redis服务器连接端口 spring.redis.port=6379 # Redis服务器连接密码(默认为空) spring.redis.password= # 连接池最大连接数(使用负值表示没有限制) spring.redis.pool.max-active=8 # 连接池最大阻塞等待时间(使用负值表示没有限制) spring.redis.pool.max-wait=-1 # 连接池中的最大空闲连接 spring.redis.pool.max-idle=8 # 连接池中的最小空闲连接 spring.redis.pool.min-idle=0 # 连接超时时间(毫秒) spring.redis.timeout=0Jedis使用
package com.test.booleanjava.helloRS.util; import redis.clients.jedis.Jedis; /** * @author booleanjava * Date: 2019/7/2 19:48 * description:redis的工具类 */ public class RedisUtil { static Jedis jedis = new Jedis("localhost"); /** * 插入key,如果存在就更新 * @param key * @param value * @return */ public static String set(String key, String value){ return jedis.set(key, value); } /** * 获取key的值 * @param key * @return */ public static String get(String key) { return jedis.get(key); } /** * 删除key * @param key * @return */ public static Long del(String key){ return jedis.del(key); } /** * 设置一个有过期时间的key(秒) * @param key * @param seconds * @param value * @return */ public static String setex(final String key, final int seconds, final String value){ return jedis.setex(key, seconds, value); } /** * 如果不存在就执行操作,用作简单分布式锁 * * @param key * @param value * @return true表示执行,false表示没有执行 */ public static Boolean setnx(final String key, final String value){ return jedis.setnx(key, value) == 1; } }RedisTemplates使用
package com.test.booleanjava.helloRS.util; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; /** * @author boolean * Date: 2019/7/2 19:48 * description: */ @Component public class Redisplus { @Autowired private RedisTemplate redisTemplate; public void set(String key, String value){ redisTemplate.opsForValue().set(key, value); } }测试
package com.test.booleanjava.helloRS.controller; import com.test.booleanjava.helloRS.entity.User; import com.test.booleanjava.helloRS.util.Redisplus; import com.test.booleanjava.helloRS.service.IUserService; import com.test.booleanjava.helloRS.util.RedisUtil; import com.test.base.core.util.LogUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Date; /** * @author booleanjava * Date: 2019/7/2 19:48 * description: */ @RestController @RequestMapping("/helloRS/redisHello") public class RedisHello { private final static Logger logger = LoggerFactory.getLogger(RedisHello.class); private final static String USERKEY = "com.test.booleanjava.helloRS.controller.setex"; private final static String LOCKKEY = "com.test.booleanjava.helloRS.controller.lock"; @Autowired private IUserService iUserService; @Autowired private Redisplus redisplus; @Autowired private RedisTemplate redisTemplate; RedisSerializer redisSerializer =new StringRedisSerializer(); @RequestMapping("/hello") public String hello(){ LogUtil.info("redis的展示:[{}]", redisTemplate); return "hello, redis"; } @RequestMapping("/set") public String set(){ Date date = new Date(); redisTemplate.setKeySerializer(redisSerializer); redisTemplate.opsForValue().set("q", "1"); redisTemplate.opsForValue().get("q"); System.out.println(redisTemplate.opsForValue().get("q")); RedisUtil.set("a1", String.valueOf(1)); logger.info("redis的展示:[{}]", redisTemplate); return "hello, set一下redis"; } @RequestMapping("/setex") public String setex( ){ // String key = "1min"; // int seconds = 10; // String value = "陈"; // RedisUtil.setex(key, seconds, value); // String rs = RedisUtil.get(key); // logger.info("获取的值:[{}]", rs); String value = RedisUtil.get(USERKEY); if (value != null) { logger.info("缓存的user值:[{}]", value); return value; } User user = iUserService.query().eq("name", "chen").one(); logger.info("user的值:[{}]",user.toString()); if (user != null ) { RedisUtil.setex(USERKEY, 60, user.toString()); } return "hello,booleanjava,设置了有时限的key"; } @RequestMapping("/del") public String del(String key) { redisTemplate.delete(key); return "hello, del一下redis"; } /** * 做分布锁, *先加锁,写业务,最后解锁 * @return */ @RequestMapping("/lock") public String lock() { //加锁 RedisUtil.setnx(LOCKKEY,LOCKKEY); //写业务代码,一人我饮酒醉 //解锁 RedisUtil.del(LOCKKEY); return "hello, lock一下redis"; } }源码
https://github.com/blackdogss...
深入 背景互联网公司大部分通常使用myslq作为数据库存储数据,但是mysql存数据是以影响IO为代价的,所以mysql是系统的常见瓶颈,为解决这个问题,redis这种非关系型数据库就出现了,存在即合理。redis喜欢在内存操作,比mysql在磁盘瞎忙高效多了,因此深受人们喜爱。
数据结构redis有五种数据结构
1.String 字符串
2.Hash哈希
3.List列表
4.Set集合
5.Sorted Set
最常用的就是String类型,通常使用它做缓存,减轻直接访问数据库的压力。Hash的话可以用来做用户id,List可以用来做粉丝列表,Set的话可以做共同好友,Sorted Set可以做排行榜。
分布式锁redis处理上面列举的例子,还有就是可以做分布式锁,在分布式系统中,接口面临的是多进程多线程访问,如果依赖java的锁是不能解决问题的,因为进程之间不共享内存;利用数据库加锁又显得笨重,因此还得用redis来加锁。redis怎么加锁,主要还是利用setnx命令,该命令作用是如果key存在就不执行操作,不存在的话就设置value,这种特性就是为锁打造的啊。
公众号文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/75225.html
摘要:一概括,如果使用开发一个的应用创建一个项目并且导入相关包。创建一个编写一个控制类需要一个部署应用的服务器如,特点设计目的是用来简化新应用的初始搭建以及开发过程。启动器可以和位于同一个包下,或者位于的上一级包中,但是不能放到的平级以及子包下。 一,Spring Boot 介绍 Spring Boot不是一个新的框架,默认配置了多种框架使用方式,使用SpringBoot很容易创建一个独立运...
摘要:经过上述两步的操作,你可以访问数据了。数据访问层通过来访问分钟过期单元测试启动单元测试,你发现控制台打印了单元测试通过源码下载参考资料 这篇文章主要介绍springboot整合redis 引入依赖 在pom文件中添加redis依赖: org.springframework.boot spring-boot-starter-data-redis 配置数据源 spri...
摘要:使用嵌入式容器,应用无需达成包。自动依赖与版本控制。准生产环境的运行时应用监控。告诉开启自动配置功能,这样自动配置才能生效。其组成为为的底层注解,表明给容器中导入一个组件,导入的组建由类提供。 Spring Boot——入门 spring boot简化了spring的开发,是J2EE一站式解决方案。 Spring Boot 的优缺点 优点 快速创建独立运行的服务,与主流框架集成。 使...
摘要:开公众号差不多两年了,有不少原创教程,当原创越来越多时,大家搜索起来就很不方便,因此做了一个索引帮助大家快速找到需要的文章系列处理登录请求前后端分离一使用完美处理权限问题前后端分离二使用完美处理权限问题前后端分离三中密码加盐与中异常统一处理 开公众号差不多两年了,有不少原创教程,当原创越来越多时,大家搜索起来就很不方便,因此做了一个索引帮助大家快速找到需要的文章! Spring Boo...
阅读 3228·2021-11-08 13:21
阅读 1209·2021-08-12 13:28
阅读 1419·2019-08-30 14:23
阅读 1938·2019-08-30 11:09
阅读 852·2019-08-29 13:22
阅读 2699·2019-08-29 13:12
阅读 2560·2019-08-26 17:04
阅读 2270·2019-08-26 13:22