Mall-03---Redis使用以及RedisTemplate

233 阅读3分钟

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);
}