在项目中使用Jedis操作Redis
1.导入maven坐标
Jedis的maven坐标:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.0</version>
</dependency>
2.编写java代码连接redis并进行操作
@Test public void testRedis() { // 1.获取连接 Jedis jedis = new Jedis("localhost", 6379); // 2.执行具体操作 jedis.set("username", "xiaoming"); // 3.关闭连接 jedis.close(); }
在Springboot中使用Jedis
1.先导入坐标
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
2.spring Data Redis
(1)在springboot配置文件中加入以下配置
spring: application: name: springdataredis_demo #Redis的相关配置 redis: host: localhost port: 6379 database: 0 #默认为0号数据库中的操作 在redis中通过 select 1(2 3 4 等等) jedis: #连接池配置 pool: max-active: 8 #最大连接数 max-idle: 4 #最大空闲连接 max-wait: 1ms #最大堵塞等待时间 min-idle: 0 #连接池中最小空闲连接
(2)创建一个config配置类
@Configuration public class RedisConfig extends CachingConfigurerSupport { @Bean @SuppressWarnings("all") public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>(); //默认的Key序列化器为:JdkSerializationRedisSerializer redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setConnectionFactory(connectionFactory); return redisTemplate; } }
(3)使用测试类测试
注:在导入RedisTemplate时会产生一个错误,说找不到RedisTemplate的Bean类型
解决方案:引用时,不加@AutoWired 而是加上一个@Resource注解
@Resource private RedisTemplate redisTemplate;
<1>操作String类型数据
/** * 操作String类型数据 */ @Test public void testString() { // opsForValue方法用于操作字符串类型 redisTemplate.opsForValue().set("city123", "beijing"); String value = (String) redisTemplate.opsForValue().get("city123"); System.out.println(value); // 给redis中的数据加上一个存活时间 redisTemplate.opsForValue().set("key1", "value1", 10l, TimeUnit.SECONDS); // 当key存在不进行设置 Boolean aBoolean = redisTemplate.opsForValue(). setIfAbsent("city123","shanghai"); System.out.println(aBoolean); }
<2>操作hash类型数据
@Test public void testHash() { HashOperations hashOperations = redisTemplate.opsForHash(); // 存值 hashOperations.put("002", "name", "xiaoming"); hashOperations.put("002", "age", "20"); hashOperations.put("002", "address", "beijing"); // 取值 Object name = hashOperations.get("002", "name"); System.out.println(name); // 获取hash结构中所有字段 Set keys = hashOperations.keys("002"); for (Object key : keys) { System.out.println(key); } // 获取hash结构中所有值 List values = hashOperations.values("002"); for (Object value : values) { System.out.println(value); } }
<3>操作list类型数据
@Test public void testList() { ListOperations listOperations = redisTemplate.opsForList(); // 存值 listOperations.leftPush("mylist", "a"); listOperations.leftPushAll("mylist", "b", "c", "d"); // 取值 List<String> mylist = listOperations.range("mylist", 0, -1); for (String list : mylist) { System.out.println(list); } Long length = listOperations.size("mylist"); int len = length.intValue(); for (int i = 0; i < len; i++) { // 出队列 Object element = listOperations.rightPop("mylist"); System.out.println(element); } }
<4>操作Zset类型数据
@Test public void testZset() { ZSetOperations zSetOperations = redisTemplate.opsForZSet(); // 存值 zSetOperations.add("mykeySet", "a", 10.0); zSetOperations.add("mykeySet", "b", 9.0); zSetOperations.add("mykeySet", "c", 8.0); zSetOperations.add("mykeySet", "d", 7.0); zSetOperations.add("mykeySet", "e", 6.0); // 取值 Set<String> mykeySet = zSetOperations.range("mykeySet", 0, -1); for (String s : mykeySet) { System.out.println(s); } // 修改分数 zSetOperations.incrementScore("mykeySet", "b", 11.0); // 删除元素 zSetOperations.remove("mykeySet", "a", "b"); Set<String> mykeySet1 = zSetOperations.range("mykeySet", 0, -1); for (String s : mykeySet1) { System.out.println(s); } }
<5>通用的redis操作
@Test public void testCommon() { // 获取所有的key keys *操作 Set<String> keys = redisTemplate.keys("*"); // 判断某个key是否存在 Boolean baidu = redisTemplate.hasKey("baidu"); System.out.println(baidu); // 删除指定key redisTemplate.delete("mykeySet"); // 获取指定key对应的value DataType myset = redisTemplate.type("myset"); System.out.println(myset.name()); }