Redis
- 数据类型操作命令
- 字符串
- 哈希
- 列表
- 集合
- 有序集合
- 通用命令
- Redis 的Java客户端
- Spring Date Redis 使用方式
- 实现数据类型操作
- 字符串类型
- 哈希类型
- 列表类型
- 集合集合
- 有序集合
- 通用命令
数据类型操作命令
字符串
操作命令:
操作命令 | 作用 |
---|---|
SET key value | 设置指定 key 的值 |
GET key | 获取指定 key 的值 |
SETEX key seconds value | 设置指定 key 的值,并将过期时间改为 seconds 秒 |
SETNX key value | 只有在 key 不存在时 设置 key 的值 |
哈希
哈希( hash ):也叫散列,类似于 HashMap 结构
操作命令 | 作用 |
---|---|
HSET key field value | 将哈希表 key 中的字段 field 设为 value |
HGET key field | 获取 字段 值 |
HDEL key field | 删除指定 字段的值 |
HKEYS key | 获取哈希表 所有字段 |
HVALS key | 获取所有值 |
列表
列表 ( list ):按照插入顺序排序,可以有重复元素,类似于 LinkedList
操作命令 | 作用 |
---|---|
LPUSH key value1 value2 | 将 一个 或 多个值 插到头部 |
LRANGE key start stop | 获取指定范围的元素 |
RPOP key | 移除 列表最后一个元素 |
LLEN key | 获取列表长度 |
集合
集合( set ):无序集合,没有重复元素,类似与 HashSet
操作命令 | 作用 |
---|---|
SADD key member1 [member2] | 添加一个或多个 |
SMEMBERS key | 返回集合 所有成员数 |
SCARD key | 获取集合成员数 |
SINTER key1 [key2] | 获取交集 |
SUNION key1 [key2] | 返回所有给定集合的并集 |
SREM key member1 [member2] | 删除一个或多个 |
有序集合
有序集合(sorted set / zset):集合中每个元素关联一个分数(score),根据 分数升序排序,没有重复元素。
操作命令 | 作用 |
---|---|
ZADD key score1 member1 [score2 member2] | 添加一个或多个成员,并赋初值 score |
ZRANGE key start stop [WITHSCORES] | 返回有序集合中指定区间内的成员 |
ZINCRBY key increment member | 给元素添加增量 increment |
ZREM key member [member] | 移除一个或多个成员 |
通用命令
操作命令 | 作用 |
---|---|
KEYS pattern | 查找所有符合 模式( pattern ) 的 key |
EXISTS key | 检查 key 是否存在 |
TYPE key | 返回 key 存储值的类型 |
DEL key | key 存在时 删除 |
Redis 的Java客户端
- Jedis (官方推荐)
- Lettuce
- Spring Data Redis
Spring Date Redis 使用方式
Spring Data Redis 是 Java 的一部分,对 Redis 底层开发包进行了高度封装,可以使用 Spring Data Redis 简化操作
操作步骤:
-
- 导入Spring Data Redis 的 maven 坐标
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
-
- 配置 Redis 数据源
spring:redis:host: ${sky.redis.host}port: ${sky.redis.port}password: ${sky.redis.password}datebase: ${sky.redis.database}
-
- 编写配置类,创建 RedisTemplate 对象
@Configuration
@Slf4j
public class RedisConfiguration {@Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {log.info("开始创建Redis模版对象:{}",redisConnectionFactory);RedisTemplate redisTemplate = new RedisTemplate();//设置redis 的连接工厂对象redisTemplate.setConnectionFactory(redisConnectionFactory);//设置Redis key的序列化器redisTemplate.setKeySerializer(new StringRedisSerializer());return redisTemplate;}
}
-
- 通过 RedisTemplate 对象操作 Redis
@SpringBootTest
public class SpringDataRedisTest {@Autowiredprivate RedisTemplate redisTemplate;@Testpublic void testRedisTemplate() {System.out.println(redisTemplate);//操作字符串对象ValueOperations valueOperations = redisTemplate.opsForValue();//操作HashHashOperations hashOperations = redisTemplate.opsForHash();//操作列表ListOperations listOperations = redisTemplate.opsForList();//操作集合SetOperations setOperations = redisTemplate.opsForSet();//操作有序集合ZSetOperations zSetOperations = redisTemplate.opsForZSet();}
}
实现数据类型操作
字符串类型
//setredisTemplate.opsForValue().set("hello","world");//getString hello=(String) redisTemplate.opsForValue().get("hello");System.out.println(hello); // world//setex 设置定时redisTemplate.opsForValue().set("code","123",3, TimeUnit.DAYS);//不存在时 设置值 返回 true 设置成功 false 设置失败boolean is=redisTemplate.opsForValue().setIfAbsent("code","1");System.out.println(is); // false
哈希类型
HashOperations hashOperations=redisTemplate.opsForHash();//HSET 设置 键:值hashOperations.put("100","name","tom");hashOperations.put("100","age","20");//HGETString name=(String) hashOperations.get("100","name");System.out.println(name); // tom//HKEYS 获取所有keySet keys=hashOperations.keys("100");System.out.println(keys); // [name, age]//HVALS 获取所有 valueList values=hashOperations.values("100");System.out.println(values); // [tom, 20]//HDELhashOperations.delete("100","name");
列表类型
ListOperations listOperations=redisTemplate.opsForList();//LPUSH 添加到 头部listOperations.leftPushAll("mylist","a","b","c");//添加到尾部listOperations.rightPush("mylist","d");//LRANGE 获取List<String> list=listOperations.range("mylist",0,-1);System.out.println(list); // [c, b, a, d]//RPOP 删除最后一个listOperations.rightPop("mylist");//LLEN 获取 长度Long size=listOperations.size("mylist");System.out.println(size); // 3
集合集合
SetOperations setOperations=redisTemplate.opsForSet();//SADDsetOperations.add("set1","a","b","c");setOperations.add("set2","a","b","x");//SMEMBERS 返回所有成员Set members=redisTemplate.opsForSet().members("set1");System.out.println(members); // [b, a, c]//SCARD 获取成员数量Long size=setOperations.size("set1");System.out.println(size); // 3//SINTER 取交集Set setinter=setOperations.intersect("set1","set2");System.out.println(setinter); // [b, a]//SUNION 并集Set union =setOperations.union("set1","set2");System.out.println(union); // [b, a, x, c]//SREM 删除一个 或 多个setOperations.remove("set" ,"a","b");
有序集合
ZSetOperations zSetOperations=redisTemplate.opsForZSet();//ZADD 添加并 赋分值 小 -> 大zSetOperations.add("zset1","a",10);zSetOperations.add("zset1","b",12);zSetOperations.add("zset1","c",9);//ZRANGE 显示区间数值Set zset1=zSetOperations.range("zset1",0,-1);System.out.println(zset1);// [c, a, b]//ZINCRBY 修改分数 增量zSetOperations.incrementScore("zset1","b",-10);// [b, c, a]System.out.println(zSetOperations.range("zset1",0,-1));//ZREM 移除 单 多个 成员zSetOperations.remove("zset1","a","b");
通用命令
//KEYS 返回符合的 keySet keys=redisTemplate.keys("list");//EXISTS 判断是否存在Boolean name=redisTemplate.hasKey("name");Boolean set1=redisTemplate.hasKey("set1");System.out.println(name+" "+set1); //false true//TYPE 返回 key 存储类型for (Object key : keys) {DataType type=redisTemplate.type(key);System.out.println("类型:"+type); //类型:STRING}//DEL 存在时删除redisTemplate.delete("mylist");