java中使用redis
2024-01-02 18:33:10
1、redis数据类型
1.1、5种数据类型
redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:字符串 string、哈希 hash、列表 list、集合 set、有序集合 sorted set / zset。
字符串(string):普通字符串,Redis中最简单的数据类型。
哈希(hash):也叫散列,类似于Java中的HashMap结构。
列表(list):按照插入顺序排序,可以有重复元素,类似于Java中的LinkedList。
集合(set):无序集合,没有重复元素,类似于Java中的HashSet。
有序集合(sorted set/zset):集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素
字符串类型操作指令开头一般为s开头(SET 、GET、SETEX 、SETNX )
哈希操作命令操作指令开头一般为h开头(HSET ???????、HGET ???????、HDEL ???????、HKEYS ???????、HVALS )
列表操作命令指令开头一般为l开头(LPUSH ???????、LRANGE ???????、RPOP ???????、LLEN ???????、BRPOP )
集合操作命令指令开头一般为s开头(SADD 、SMEMBERS ???????、SCARD ???????、SINTER 、SUNION ???????、SREM )
有序集合操作命令指令开头一般为z开头(ZADD ???????、ZRANGE ???????、ZINCRBY ???????、ZREM )
1.2、字符串操作命令
SET key value 设置指定key的值
GET key 获取指定key的值
SETEX key seconds value 设置指定key的值,并将 key 的过期时间设为 seconds 秒
100秒之后它会自动销毁
SETNX key value 只有在 key 不存在时设置 key 的值
?
1.3、哈希操作命令?
redis hash 是一个string类型的 field 和 value 的映射表,hash特别适合用于存储对象
HSET key field value 将哈希表 key 中的字段 field 的值设为 value
HGET key field 获取存储在哈希表中指定字段的值
HDEL key field 删除存储在哈希表中的指定字段
?
HKEYS key 获取哈希表中所有字段
HVALS key 获取哈希表中所有值
?
1.4、列表操作命令?
redis 列表是简单的字符串列表,按照插入顺序排序?
LPUSH key value1 [value2] 将一个或多个值插入到列表头部
LRANGE key start stop 获取列表指定范围内的元素
?
RPOP key 移除并获取列表最后一个元素
?
1.5、集合操作命令?
redis set 是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据
SADD key member1 [member2] 向集合添加一个或多个成员
SMEMBERS key 返回集合中的所有成员
?
SCARD key 获取集合的成员数
SINTER key1 [key2] 返回给定所有集合的交集
SUNION key1 [key2] 返回所有给定集合的并集
SREM key member1 [member2] 移除集合中一个或多个成员
?
1.6、有序集合操作命令
redis有序集合是string类型元素的集合,且不允许有重复成员。每个元素都会关联一个double类型的分数,根据分数来进行排序
ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员
ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合中指定区间内的成员
ZINCRBY key increment member 有序集合中对指定成员的分数加上增量 increment
?
ZREM key member [member ...] 移除有序集合中的一个或多个成员
?
1.7、通用命令?
KEYS pattern 查找所有符合给定模式(pattern)的 key
EXISTS key 检查给定 key 是否存在
?
TYPE key 返回 key 所储存的值的类型
?
DEL key 该命令用于在 key 存在是删除 key
?
2、java中使用redis
2.1、引入maven依赖
?pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
RedisTemplate,对相关api进行了归类封装,将同一类型操作封装为operation接口,分类如下:
- ValueOperations: string数据操作
- SetOperations:? ? set类型数据操作
- ZSetOperations:? zset类型数据操作
- HashOperations:?hash类型的数据操作
- ListOperations:? ? list类型的数据操作
?application.yml中?
spring:
application:
name: springdataredis_demo
#Redis相关配置
redis:
host: localhost
port: 6379
#password: 123456
database: 0 #默认操作的是0号数据库
jedis:
#Redis连接池配置
pool:
max-active: 8 #最大连接数
max-wait: 1ms #连接池最大阻塞等待时间
max-idle: 4 #连接池中的最大空闲连接
min-idle: 0 #连接池中的最小空闲连接
/**
* Redis配置类
*/
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
//默认的Key序列化器为:JdkSerializationRedisSerializer
//String类型序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());
//hash类型序列化器
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(connectionFactory);
return redisTemplate;
}
}
注:当前配置类不是必须的,因为 Spring Boot 框架会自动装配 RedisTemplate 对象,但是默认的key序列化器为JdkSerializationRedisSerializer,导致我们存到Redis中后的数据和原始数据有差别,故设置为StringRedisSerializer序列化器
2.2、操作String类型数据
@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {
//yml中配置支持RedisTemplate对象自动装配
@Autowired
private RedisTemplate redisTemplate;
/**
* 操作String类型数据
*/
@Test
public void testString(){
//ValueOperations valueOperations = redisTemplate.opsForValue();
redisTemplate.opsForValue().set("city123","beijing");
//打印输出
String value = (String) redisTemplate.opsForValue().get("city123");
System.out.println(value);
//设置超时时间
redisTemplate.opsForValue().set("key1","value1",10l, TimeUnit.SECONDS);
//当key不存在才设置value
Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city1234", "nanjing");
System.out.println(aBoolean);
}
}
2.3、操作Hash类型数据
@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {
@Autowired
private RedisTemplate redisTemplate;
/**
* 操作Hash类型数据
*/
@Test
public void testHash(){
HashOperations hashOperations = redisTemplate.opsForHash();
//存值
hashOperations.put("002","name","xiaoshen");
hashOperations.put("002","age","20");
hashOperations.put("002","address","nj");
//取值
String age = (String) hashOperations.get("002", "age");
System.out.println(age);
//获得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);
}
}
}
2.4、操作List类型数据
@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {
@Autowired
private RedisTemplate redisTemplate;
/**
* 操作List类型的数据
*/
@Test
public void testList(){
ListOperations listOperations = redisTemplate.opsForList();
//存1个值
listOperations.leftPush("mylist","a");
//存多个值
listOperations.leftPushAll("mylist","b","c","d");
//取值
List<String> mylist = listOperations.range("mylist", 0, -1);
for (String value : mylist) {
System.out.println(value);
}
//获得列表长度 llen
Long size = listOperations.size("mylist");
int lSize = size.intValue();
for (int i = 0; i < lSize; i++) {
//出队列
String element = (String) listOperations.rightPop("mylist");
System.out.println(element);
}
}
}
2.5、操作Set类型数据
@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {
@Autowired
private RedisTemplate redisTemplate;
/**
* 操作Set类型的数据
*/
@Test
public void testSet(){
SetOperations setOperations = redisTemplate.opsForSet();
//存值
setOperations.add("myset","a","b","c","a");
//取值
Set<String> 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) {
![在这里插入图片描述](https://img-blog.csdnimg.cn/498ec17ed8744d25a0cd5ee96fc20b73.png)
System.out.println(o);
}
}
}
2.6、操作ZSet类型数据
@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {
@Autowired
private 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);
//取值
Set<String> 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);
}
}
}
2.7、redis 通用操作
@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {
@Autowired
private RedisTemplate redisTemplate;
/**
* 通用操作,针对不同的数据类型都可以操作
*/
@Test
public void testCommon(){
//获取Redis中所有的key
Set<String> keys = redisTemplate.keys("*");
for (String key : keys) {
System.out.println(key);
}
//判断某个key是否存在
Boolean itcast = redisTemplate.hasKey("dongli");
System.out.println(itcast);
//删除指定key
redisTemplate.delete("myZset");
//获取指定key对应的value的数据类型
DataType dataType = redisTemplate.type("myset");
System.out.println(dataType.name());
}
}
文章来源:https://blog.csdn.net/qq_41482600/article/details/135343784
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!