redis基础的数据结构总共有5种,其它的命令和数据结构目前应用不到。他们分别为:
字符串:String
哈希:Hash
列表:List
集合:Set
有序集合:ZSet
每种数据结构的原理和我们平时使用的都差不多,因此这里不讲,如果有需要参考的,具体可以查看redis官网
Java操作Redis最常用的2种数据结构
基础配置
由于本人直接宝塔部署了docker,在docker内pull了一个镜像创建并运行了redis最新版的容器。
因此以后的操作其实都是对服务器内docker容器的操作。
首先是我们需要用到的maven坐标,在spring应用启动项内点击:spring data redis
,junit
单元测试,fastjson
阿里巴巴,lombok
即可,再手动加入commons-pool2
(跟随redis的东西)具体坐标如下
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.79</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
然后redis的配置是以配置文件的方式进行更改的:
spring:
application:
name: redis-demo
redis:
host: localhost # 自己的主机名
port: 6379 # 6379
password: password # 密码,如果没设置可以不加
lettuce: # 这里我们默认使用lettuce
pool: # 连接池设置
max-active: 8 # 最大连接
max-idle: 8 # 最大空闲连接
min-idle: 0 # 最小空闲连接
max-wait: 100 # 最大连接等待时间
接下来我们便可以再测试项/新写一个class进行对redis的操作了
提前说一下,由于jdk以及springmvc内的序列化和反序列化方式过于繁琐冗余,因此我们使用阿里巴巴的fastjson,因此,我们引入的对象是StringRedisTemplate
而不是RedisTemplate
首先,需要引入并自动装配StringRedisTemplate
@Autowired
private StringRedisTemplate stringRedisTemplate;
然后,我们新建一个测试项来运行他
1.String类型
@Test
void testString() {
//插入一条string类型的数据,stringRedisTemplate内操作string的方法名叫opsForValue,然后set与get即可
stringRedisTemplate.opsForValue().set("test", "it's a test data");
//读取一条string类型的数据
Object name = stringRedisTemplate.opsForValue().get("test");
System.out.println(name);
}
我们即可在RDM中发现数据已存入服务器内的redis
当然,对于自定义对象来说,就需要用到我们之前导入的fastjson来序列化和反序列化了
@Test
void testUserString() {
//创建对象
User user1 = new User();
user1.setName("张三");
user1.setAge(18);
//写入数据,使用阿里巴巴的JSON.toJSONString()将自定义对象转化为json格式,再存入value中
String user1String = JSON.toJSONString(user1);
stringRedisTemplate.opsForValue().set("user1", user1String);
//读取数据
String getUser = stringRedisTemplate.opsForValue().get("user1");
System.out.println(getUser);
}
2.hash类型
redis的哈希表相当于一个key可以对应多个字段的值
也就是说,hashname-> hashkey -> hashvalue
在代码中便可以这么写:
@Test
void testHashString() {
//put三元素:hashname,hashkey,hashvalue
stringRedisTemplate.opsForHash().put("userHash", "name", "虎哥");
stringRedisTemplate.opsForHash().put("userHash", "age", "21");
Object hashName = stringRedisTemplate.opsForHash().get("userHash", "name");
//我们也可以使用entries方法来将指定的hashname内所有的键值对取出,即:取出时为一个json格式的map集合
Map<Object, Object> userHash = stringRedisTemplate.opsForHash().entries("userHash");
System.out.println(hashName);
System.out.println(userHash);
}
他在RDM中的显示为这样:
以上即为redis最常用的2种数据结构,在实际项目开发中使用量非常的广泛。