建设银行滇龙行网站,网站建设上海公司,大连建设工业产品网站,上海网站建设seo公司哪家好在Java中操作Redis 文章目录 在Java中操作Redis1、介绍2、Jedis3、Spring Data Redis3.1、对String的操作3.2、对哈希类型数据的操作3.3、对list的操作3.4、对set类型的操作3.5、对 ZSet类型的数据#xff08;有序集合#xff09;3.6、通用类型的操作 1、介绍
Redis 的Java客…在Java中操作Redis 文章目录 在Java中操作Redis1、介绍2、Jedis3、Spring Data Redis3.1、对String的操作3.2、对哈希类型数据的操作3.3、对list的操作3.4、对set类型的操作3.5、对 ZSet类型的数据有序集合3.6、通用类型的操作 1、介绍
Redis 的Java客户端很多官方推荐的有三种: Jedis Lettuce Redisson
Spring对Redis客户端进行了整合提供了Spring Data Redis在Spring Boot项目中还提供了对应的Starter即spring-boot-starter-data-redis
2、Jedis
Jedis的maven坐标: !--redis--dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion2.8.0/version/dependency使用Jedis操作Redis的步骤:
获取连接执行操作关闭连接关闭连接
编写一个测试类测试redis
package com.mannor.jedisdemo;import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import redis.clients.jedis.Jedis;SpringBootTest
class JedisDemoApplicationTests {Testvoid contextLoads() {//1. 获取连接Jedis jedis new Jedis(localhost, 6379);//2. 执行操作关闭连接jedis.set(name, mannor);//3. 关闭连接jedis.close();}
}在此之前需要将Redis服务启动起来redis-server.exe 程序运行前 测试项目运行后 测试其他
package com.mannor.jedisdemo;import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import redis.clients.jedis.Jedis;import java.util.Set;SpringBootTest
class JedisDemoApplicationTests {/*** 使用jedis操作Redis*/Testvoid contextLoads() {//1. 获取连接Jedis jedis new Jedis(localhost, 6379);//2. 执行操作关闭连接jedis.set(name, mannor);//设置String name jedis.get(name);//获取System.out.println(name);jedis.del(name);//删除jedis.hset(myhash,addr,beijing);//设置哈希表值String hget jedis.hget(myhash, addr);//获取哈希表System.out.println(hget);SetString keys jedis.keys(*);//获取所有Redis的数据for(String key:keys){System.out.println(key);}//3. 关闭连接jedis.close();}}
测试项目源码上述测试项目的源码
3、Spring Data Redis
在Spring Boot项目中可以使用Spring Data Redis来简化Redis操作maven坐标: dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependencySpring Data Redis中提供了一个高度封装的类: RedisTemplate针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口具体分类如下:
ValueOperations简单K-V操作SetOperationsset类型数据操作ZSetOperationszset类型数据操作HashOperations针对map类型的数据操作ListOperations针对list类型的数据操作
yml配置文件
spring:application:name: springdataredis_demo#Redis相关配置redis:host: localhostport: 6379#password: 123456database: 0 #操作的是0号数据库(redis存在0-15号数据库默认在命令中使用select来切换)jedis:#Redis连接池配置pool:max-active: 8 #最大连接数max-wait: 1ms #连接池最大阻塞等待时间 max-idle: 4 #连接池中的最大空闲连接min-idle: 0 #连接池中的最小空闲连接在获取到RedisTemplate对象执行下列语句
redisTemplate.opsForValue().set(city,beijing);输出
原因RedisTemplate在操作Redis数据库的时候将key做了一个序列化上述结果就是序列化的结果为了解决这个问题就要配置一个配置类
package com.itheima.config;import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;/*** Redis配置类*/
Configuration
public class RedisConfig extends CachingConfigurerSupport {Beanpublic RedisTemplateObject, Object redisTemplate(RedisConnectionFactory connectionFactory) {RedisTemplateObject, Object redisTemplate new RedisTemplate();//默认的Key序列化器为JdkSerializationRedisSerializerredisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setConnectionFactory(connectionFactory);return redisTemplate;}
}对于接下类的在java中对Redis的操作我们可以参照Redis中的常用命令 3.1、对String的操作
ValueOperations接口示例
SpringBootTest
class SpringDataRedisApplicationTests {Autowiredprivate RedisTemplate redisTemplate;/*** 操作String类型的数据*/Testvoid contextLoads() {//redisTemplate.opsForValue().set(mannor ,rediaz);String mannor (String) redisTemplate.opsForValue().get(mannor);System.out.println(mannor);redisTemplate.opsForValue().set(k1, v1, 10L, TimeUnit.SECONDS);Boolean aBoolean redisTemplate.opsForValue().setIfAbsent(mannor1, mannor);System.out.println(aBoolean);}
}3.2、对哈希类型数据的操作
SpringBootTest
class SpringDataRedisApplicationTests {Autowiredprivate RedisTemplate redisTemplate;/*** 操作hash类型的数据*/Testpublic void hashTest() {HashOperations hashOperations redisTemplate.opsForHash();//存hashOperations.put(002, name, zhangsan);hashOperations.put(002, age, 20);hashOperations.put(002, addr, beijing);//取Object age hashOperations.get(002, age);
// System.out.println((String) age);//获取所有字段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.3、对list的操作 Autowiredprivate RedisTemplate redisTemplate;/*** 操作list类型的数据*/Testpublic void listTest() {ListOperations listOperations redisTemplate.opsForList();//存listOperations.leftPush(list, 00);listOperations.leftPushAll(list, 01, 02, 03);//取值List list listOperations.range(list, 0, -1);for (Object val : list) {System.out.println(val);}System.out.println(------------------------------------------------------------);//获取长度来遍历Long size listOperations.size(list);for (int i 0; i size; i) {//出队列String element (String) listOperations.rightPop(list);System.out.println(element);}3.4、对set类型的操作 Autowiredprivate RedisTemplate redisTemplate;/*** 操作Set类型的数据*/Testpublic void testSet() {SetOperations setOperations redisTemplate.opsForSet();//存值setOperations.add(myset, a, b, c, a);//取值SetString myset setOperations.members(myset);for (String o : myset) {System.out.println(o);}//删除成员setOperations.remove(myset, a, b);//取值myset setOperations.members(myset);for (String o : myset) {System.out.println(o);}}3.5、对 ZSet类型的数据有序集合 Autowiredprivate RedisTemplate redisTemplate;/** * 操作ZSet类型的数据*/
Test
public void testZset() {ZSetOperations zSetOperations redisTemplate.opsForZSet();//存值zSetOperations.add(myZset, a, 10.0);zSetOperations.add(myZset, b, 11.0);zSetOperations.add(myZset, c, 12.0);zSetOperations.add(myZset, a, 13.0);//取值SetString myZset zSetOperations.range(myZset, 0, -1);for (String s : myZset) {System.out.println(s);}//修改分数zSetOperations.incrementScore(myZset, b, 20.0);//取值myZset zSetOperations.range(myZset, 0, -1);for (String s : myZset) {System.out.println(s);}//删除成员zSetOperations.remove(myZset, a, b);//取值myZset zSetOperations.range(myZset, 0, -1);for (String s : myZset) {System.out.println(s);}
}3.6、通用类型的操作 Autowiredprivate RedisTemplate redisTemplate;/*** 通用操作针对不同的数据类型都可以操作*/Testpublic void testCommon() {//获取Redis中所有的keySetString keys redisTemplate.keys(*);for (String key : keys) {System.out.println(key);}//判断某个key是否存在Boolean itcast redisTemplate.hasKey(itcast);System.out.println(itcast);//删除指定keyredisTemplate.delete(myZset);//获取指定key对应的value的数据类型DataType dataType redisTemplate.type(myset);System.out.println(dataType.name());}测试项目源代码https://gitee.com/rediaz/note-management/tree/master/Regis/SpringDataRedis