代码拉取完成,页面将自动刷新
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
application.yml 配置如下
spring:
application:
# 服务名
name: advanced
#redis配置数据
redis:
hostName: 123.206.19.217
port: 6379
database: 10
password:
pool:
maxActive: 10
maxWait: -1
maxIdle: 100
minIdle: 0
timeout: 5000
server:
# 服务端口
port: 9001
第一步:@Bean创建redis工具的实例
package com.advanced.config.redis;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPoolConfig;
@Configuration
public class RedisConfig {
@Bean(name = "jedisPoolConfig")
@ConfigurationProperties(prefix = "spring.redis.pool")
public JedisPoolConfig jedisPoolConfig() {
JedisPoolConfig config = new JedisPoolConfig();
return config;
}
@Bean(name = "jedisConnectionFactory")
@ConfigurationProperties(prefix = "spring.redis")
public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig jedisPoolConfig) {
JedisConnectionFactory factory = new JedisConnectionFactory();
JedisPoolConfig config = jedisPoolConfig;
factory.setPoolConfig(config);
return factory;
}
@Bean(name = "redisTemplate" )
public RedisTemplate<?, ?> getRedisTemplate(JedisConnectionFactory jedisConnectionFactory) {
RedisTemplate<?, ?> redisTemplate = new StringRedisTemplate(jedisConnectionFactory);
redisTemplate.setKeySerializer(new StringRedisSerializer()); // key的序列化类型
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); // value的序列化类型
// 设置启用事务支持
redisTemplate.setEnableTransactionSupport(true);
return redisTemplate;
}
}
这样在程序中就可以使用此实例来操作redis
@Autowired
public RedisTemplate redisTemplate;
同redis set命令对应方法
// 将字符串值 value 关联到 key 存储至redis.如果redis库中有相同的key,key将被覆盖
redisTemplate.opsForValue().set("userName","Liuzhiqiang");
等价于:
set userName Liuzhiqiang
// 将值 value 关联到 key ,并设置 key 的生存时间。
redisTemplate.opsForValue().set("userId",12, 10, TimeUnit.SECONDS);
等价于:
SET userId 12 EX 10
同redis get命令对应方法
// 根据key从redis中取出value
redisTemplate.opsForValue().get("userName")
等价于
get userName
// 根据key从redis中取出截取后value,value只能是字符串
// -1 为最后一位, -2为倒数第二位,以此类推
redisTemplate.opsForValue().get("userName",3, -1)
等价于
GETRANGE userName 3 -1
// 给key重新分配一个value并返回旧值
String str = (String) redisTemplate.opsForValue().getAndSet("userName", "wangyan")
等价于
GETSET userName wangyan
同redis del对应方法
// 根据key从redis库中删除
redisTemplate.delete("userName");
等价于
del userName
/**
* 批量删除
*/
List<String> list = new ArrayList<>();
list.add("userName");
list.add("userId");
redisTemplate.delete(list);
等价于
DEL userName userId
// 设置启用事务支持
redisTemplate.setEnableTransactionSupport(true);
声明事务
redisTemplate.multi();
等价于
MULTI
执行所有事务块内的命令
List<String> list = redisTemplate.exec();
等价于
exec
取消事务
redisTemplate.discard();
等价于
discard
监视一个(或多个) key
如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断
redisTemplate.discard();
redisTemplate.watch("userName");
等价于
WATCH userName
List<String> list = new ArrayList<>();
list.add("userName");
list.add("userId");
redisTemplate.watch(list);
等价于
WATCH userName userId
取消 WATCH 命令对所有 key 的监视。
redisTemplate.unwatch();
等价于
UNWATCH
package com.advanced.controller;
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.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* 开发公司:个人
* 版权:个人
* <p>
* IndexController
*
* @author 刘志强
* @created Create Time: 2019/5/23
*/
@Controller
public class IndexController {
@Autowired
public RedisTemplate redisTemplate;
private Logger logger = LoggerFactory.getLogger(getClass());
// 重定向至首页
@GetMapping("/")
public void root(HttpServletResponse httpServletResponse) throws IOException {
httpServletResponse.sendRedirect("/index");
}
/**
*
* @param type 0 开启事务 1 放弃事务
* @return
*/
@GetMapping("/affair")
@ResponseBody
public Map affair(int type) {
logger.info("=========================================事务 开始======================================");
/**
* 开启一个事务
*/
redisTemplate.multi();
redisTemplate.opsForValue().set ("11","11");
redisTemplate.opsForValue().set("22","22");
redisTemplate.opsForValue().set("33","33");
redisTemplate.opsForValue().get("11");
redisTemplate.opsForValue().get("22");
redisTemplate.opsForValue().get("33");
if (type == 0) {
/**
* 执行所有事务块内的命令。
*/
List<String> list = redisTemplate.exec();
list.forEach(o -> logger.info(o));
} else {
/**
* 取消事务,放弃执行事务块内的所有命令。如果正在使用 WATCH 命令监视某个(或某些) key,那么取消所有监视,等同于执行命令 UNWATCH 。
*/
}
return null;
}
@GetMapping("/index")
@ResponseBody
public Map index() {
logger.info("=========================================get,set,del 开始======================================");
/**
* 将字符串值 value 关联到 key 存储至redis.如果redis库中有相同的key,key将被覆盖
* 第一个参数 key
* 第二个参数 value
* 等同 SET
*/
redisTemplate.opsForValue().set("userName","Liuzhiqiang");
/**
* 将值 value 关联到 key ,并设置 key 的生存时间。
* 第一个参数 key
* 第二个参数 value
* 第三个参数 生存时间
* 第四个参数 生存时间类型
* 等同 SETEX
*/
redisTemplate.opsForValue().set("userId",12, 10, TimeUnit.SECONDS);
logger.info(String.valueOf(redisTemplate.opsForValue().get("userId")));
/**
* 根据key从redis中取出value
* 第一个参数 key
* 等同 GET
*/
logger.info((String) redisTemplate.opsForValue().get("userName"));
/**
* 根据key从redis中取出截取后value,value只能是字符串
* 第一个参数 key
* 第二个参数开始位置
* 第三个参数结束位置 -1 为最后一位, -2为倒数第二位,以此类推
*/
logger.info(redisTemplate.opsForValue().get("userName",3, -1));
/**
*给key重新分配一个value并返回旧值
* 第一个参数key
* 第二个参数新的value
*/
String str = (String) redisTemplate.opsForValue().getAndSet("userName", "wangyan");
logger.info(str);
logger.info((String) redisTemplate.opsForValue().get("userName"));
/**
* 根据key从redis库中删除
* 第一个参数 key
* 等同 DEL
*/
redisTemplate.delete("userName");
logger.info((String) redisTemplate.opsForValue().get("userName"));
List<String> list = new ArrayList<>();
list.add("userName");
list.add("userId");
/**
* 批量删除
*/
redisTemplate.delete(list);
logger.info((String) redisTemplate.opsForValue().get("userName"));
logger.info((String) redisTemplate.opsForValue().get("userId"));
logger.info("=========================================get,set,del 结束======================================");
return null;
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。