redis 操作5中数据类型
redis導入pom
<!--redis的支持-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
redis 的yml配置
spring:
redis:
#主机
host: 127.0.0.1
#端口
port: 6379
#第0个库 默认16
database: 0
#超时时间
timeout: 10000ms
#密码
password: root
jedis:
pool:
#最大活动数
max-active: 1024
#最大阻塞等待时间
max-wait: 10000ms
#最大闲置数
max-idle: 20
#最小空闲数
min-idle: 5
redis 配置类
@Configuration
public class JedisConfig {
//服务器地址
@Value("${spring.redis.host}")
private String host;
//端口
@Value("${spring.redis.port}")
private Integer port;
//选择的数据库 ,默认为0
@Value("${spring.redis.database}")
private Integer database;
//连接超时时间
@Value("${spring.redis.timeout}")
private String timeout;
@Value("${spring.redis.password}")
private String password;
//最大连接数
@Value("${spring.redis.jedis.pool.max-active}")
private Integer maxTotal;
//最大阻塞等待时间
@Value("${spring.redis.jedis.pool.max-wait}")
private String maxWait;
//最大空闲连接数
@Value("${spring.redis.jedis.pool.max-idle}")
private Integer maxIdle;
//最小空闲连接数
@Value("${spring.redis.jedis.pool.min-idle}")
private Integer minIdle;
@Bean
public JedisPool getJedisPool() {
//jedis参数的配置
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(maxTotal);
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMinIdle(minIdle);
jedisPoolConfig.setMaxWaitMillis(Long.valueOf(maxWait.substring(0, maxWait.length() - 2)));
JedisPool jedisPool = new JedisPool(jedisPoolConfig, host,port,Long.valueOf(timeout.substring(0, timeout.length() - 2)).intValue(),password,database);
return jedisPool;
}
手動添加jedis
@Test
void contextLoads() {
//创建jedis对象,连接redis服务
Jedis jedis = new Jedis("127.0.0.1", 6379);
// jedis.auth("root");
jedis.select(1);
String ping = jedis.ping();
System.out.println(ping);
jedis.set("name", "GZY");
String name = jedis.get("name");
System.out.println(name);
if (jedis != null) {
jedis.close();
}
}
@Test
void jdisPool() {
//创建一个连接池,初始化连接池对象
JedisPool jedisPool = new JedisPool(new JedisPoolConfig(), "127.0.0.1", 6379, 10000);
//从连接池拿取一个jedis对象
Jedis jedis = jedisPool.getResource();
//设置操作的redis库
jedis.select(1);
String ping = jedis.ping();
System.out.println(ping);
String age = jedis.set("age", "55");
System.out.println(age);
if (jedis != null) {
jedis.close();
}
}
通過配置類來操作5數據類型
先注入,并且初始化一個jedis
@Autowired
private JedisPool jedisPool;
private Jedis jedis = null;
spring 2后 通過BeforeEach 來 進行一些實例的初始化
// @Before
@BeforeEach
public void initConnt() {
System.out.println(jedisPool.getResource() + "------------------------------");
jedis = jedisPool.getResource();
}
操作String
/*
*操作字符串*/
@Test
public void StringRedis() {
//设置单条数据
jedis.set("price", "152");
System.out.println(jedis.get("price"));
//设置多跳数据
jedis.mset("address", "贵州", "city", "贵阳");
//获取多条数据
List<String> mget = jedis.mget("price", "address", "city");
mget.forEach(System.out::println);
//删除数据
// jedis.del("name");
}
操作Hash
/*
* 操作hash
* */
@Test
public void hashRedis() {
//添加一条数据
// 参数1 redis的key 第二个参数 hash的 key 第三参数 hash订单值
jedis.hset("user", "username", "张浩");
//获取数据
String hget = jedis.hget("user", "username");
System.out.println(hget);
/*添加多條數據*/
HashMap<String, String> map = new HashMap<>();
map.put("addAk", "暗影岛");
map.put("addNk", "洛克萨斯");
jedis.hmset("user", map);
/*获取多个*/
List<String> list = jedis.hmget("user", "addAk", "addNk");
list.forEach(System.out::println);
Map<String, String> user = jedis.hgetAll("user");
user.entrySet().forEach(e -> {
System.out.println(e.getKey() + "----" + e.getValue());
});
}
操作list
/*
* 操作 list
* */
@Test
public void listRedis() {
//左添加 从左边添加 lp 先添加 yp 后添加
jedis.lpush("student", "yp", "lp");
//右添加 向右边添加 hl 先添加 xm 后面添加
jedis.rpush("student", "hl", "xm");
/*
* 获取数据
* 参数2 起始下标
* 参数 3 结束下标
参数1 redis 的key
* */
List<String> stringList = jedis.lrange("student", 0, 3);
stringList.forEach(System.out::println);
//获取总条数
Long count = jedis.llen("student");
System.out.println("总条数: " + count);
/*
* 删除数据
* 参数1 redis的key
* 参数2 参数值的个数
* 参数3 需要删除的值
* */
jedis.lrem("student", 1, "yp");
//左弹出
String leftPop = jedis.lpop("student");
System.out.println("向左边去值 " + leftPop);
//右弹出
String rightPop = jedis.rpop("student");
System.out.println("从右边弹出 " + rightPop);
}
操作set
/*
*操作Set
* */
@Test
public void setRedis() {
//添加数据
jedis.sadd("Cat", "小黑", "橘子猫", "大黄");
//获取数据
Set<String> cat = jedis.smembers("Cat");
cat.forEach(System.out::println);
//h获取总条数
Long catCount = jedis.scard("Cat");
System.out.println("Car数量 " + catCount);
//删除数据
jedis.srem("Cat", "橘子猫");
}
過期時間的設置
@Test
/*key的实效时间
* */
public void testExpire() {
//第一种的多个写法 TODO
/* jedis.set("code", "test");
//设置过期时间 单位 秒s
jedis.expire("code", 30);
//设置过期时间 单位 毫秒ms
jedis.pexpire("code", 3000);
//-1 表示不失效 -2 为失效
jedis.ttl("code");*/
//第二种写法的多种表示
//设置过期时间 单位 秒s
jedis.setex("code", 30, "test");
//设置过期时间 单位 毫秒ms
jedis.psetex("code", 3000, "test");
//查看失效时间
jedis.pttl("code");
//第三种写法
// new SetParams();
}
查詢所有的數據
//查询所有key
@Test
public void testFindKey() {
//获取数据库的数量
Long aLong = jedis.dbSize();
System.out.println("当前redis数据库数据的总量: " + aLong);
//查询当前数据库下所有的key
Set<String> keys = jedis.keys("*");
keys.forEach(System.out::println);
}
操作事務
//事务 redis 是弱事务 注重最终一致性
@Test
public void txTest() {
//开启事务
Transaction tx = jedis.multi();
tx.set("tel", "123445");
//提交事务
//tx.exec();
//回滚事务
tx.discard();
}
最後一定要釋放資源
//释放资源
@After
public void closeCont() {
if (null != jedis) {
jedis.close();
}
}