Redis 在 Java Web 中的应用
Redis 在 Java Web 主要有两个应用场景:
- 存储 缓存 用的数据;
- 需要高速读/写的场合使用它快速读/写;
Redis解压即用,在解压文件内启动即可,详细的步骤可百度,比较简单
在 SpringBoot 中使用 Redis-----!
(1)在SpringBoot中添加Redis依赖
<!--redis依赖配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
(2)添加配置文件:
在SpringBoot中使用.properties或者.yml都可以,这里给出.yml的例子:
在spring节点下添加Redis的配置
redis:
host: localhost # Redis服务器地址
database: 0 # Redis数据库索引(默认为0)
port: 6379 # Redis服务器连接端口
password: # Redis服务器连接密码(默认为空)
jedis:
pool:
max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 8 # 连接池中的最大空闲连接
min-idle: 0 # 连接池中的最小空闲连接
timeout: 3000ms # 连接超时时间(毫秒)
在根节点下添加Redis自定义key的配置
# 自定义redis key
redis:
key:
prefix:
authCode: "portal:authCode:"
expire:
authCode: 120 # 验证码超期时间
(3)测试类
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest()
public class ApplicationTests {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Test
public void test() throws Exception {
// 保存字符串
stringRedisTemplate.opsForValue().set("aaa", "111");
Assert.assertEquals("111", stringRedisTemplate.opsForValue().get("aaa"));
}
}
(4)存储对象:
这一步跟上面使用Spring一样,只需要将POJO类实现Serializable接口。
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest()
public class ApplicationTests {
@Autowired
private RedisTemplate redisTemplate;
@Test
public void test() throws Exception {
User user = new User();
user.setName("我没有三颗心脏");
user.setAge(21);
redisTemplate.opsForValue().set("user_1", user);
User user1 = (User) redisTemplate.opsForValue().get("user_1");
System.out.println(user1.getName());
}
}
在Redis中操作List
一直背Redis的面经,还没有正式的对redis做一个应用
// list数据类型适合于消息队列的场景:比如12306并发量太高,而同一时间段内只能处理指定数量的数据!必须满足先进先出的原则,其余数据处于等待
@Test
public void listPushResitTest() {
// leftPush依次由右边添加
stringRedisTemplate.opsForList().rightPush("myList", "1");
stringRedisTemplate.opsForList().rightPush("myList", "2");
stringRedisTemplate.opsForList().rightPush("myList", "A");
stringRedisTemplate.opsForList().rightPush("myList", "B");
// leftPush依次由左边添加
stringRedisTemplate.opsForList().leftPush("myList", "0");
}
@Test
public void listGetListResitTest() {
// 查询类别所有元素
List<String> listAll = stringRedisTemplate.opsForList().range("myList", 0, -1);
logger.info("list all {}", listAll);
// 查询前3个元素
List<String> list = stringRedisTemplate.opsForList().range("myList", 0, 3);
logger.info("list limit {}", list);
}
@Test
public void listRemoveOneResitTest() {
// 删除先进入的B元素
stringRedisTemplate.opsForList().remove("myList", 1, "B");
}
@Test
public void listRemoveAllResitTest() {
// 删除所有A元素
stringRedisTemplate.opsForList().remove("myList", 0, "A");
}
在Redis中操作Hash
@Test
public void hashPutResitTest() {
// map的key值相同,后添加的覆盖原有的
stringRedisTemplate.opsForHash().put("banks:12600000", "a", "b");
}
@Test
public void hashGetEntiresResitTest() {
// 获取map对象
Map<Object, Object> map = stringRedisTemplate.opsForHash().entries("banks:12600000");
logger.info("objects:{}", map);
}
@Test
public void hashGeDeleteResitTest() {
// 根据map的key删除这个元素
stringRedisTemplate.opsForHash().delete("banks:12600000", "c");
}
@Test
public void hashGetKeysResitTest() {
// 获得map的key集合
Set<Object> objects = stringRedisTemplate.opsForHash().keys("banks:12600000");
logger.info("objects:{}", objects);
}
@Test
public void hashGetValueListResitTest() {
// 获得map的value列表
List<Object> objects = stringRedisTemplate.opsForHash().values("banks:12600000");
logger.info("objects:{}", objects);
}
@Test
public void hashSize() { // 获取map对象大小
long size = stringRedisTemplate.opsForHash().size("banks:12600000");
logger.info("size:{}", size);
}