Redis-非关系型数据库
本文最后更新于22 天前,其中的信息可能已经过时,如有错误请发送邮件到qiqin-chang@qq.com

基础信息:

下载地址:

win版:https://github.com/microsoftarchive/redis/releases

Linux版:https://download.redis.io/releases/

安装方式:解压安装

默认端口号:6379

推荐版本:3.2.1

推荐可视化工具:Another Redis

推荐驱动工具:SpringData Redis

基础操作:

服务端:

运行操作:

redis-server.exe redis.windows.conf

结束操作:

ctrl + c

客户端:

连接操作:

redis-cli.exe (默认连接本地服务端)redis-cli.exe -h 服务端地址 -p 端口号 -a 密码

退出操作:

exit

密码设置:

在redis.windows.conf文件中解开requirepass foobared (foobared为密码)

驱动工具:SpringData Redis

基础配置:

配置方式:导入maven坐标->配置Redis数据源->编写配置类->创建RedisTemplate对象->通过对象操作Redis

导入maven坐标:

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

配置Redis数据源:

spring:
redis:
host: localhost
port: 6379
password: 123456
database: 0

基础类型:

类型符号说明
字符串string普通字符,Redis中最简单的数据
哈希hash-类似与Java中的HashMap结构
列表list按照插入顺序排序,可以有重复元素,类似于Java中的LinkedList
集合set无须集合,没有重复元素,类似Java中的HashSet
有序集合sorted set/zset集合中的每个元素关联一个分数(score),根据分数升序排列,没有重复元素

操作命令:

字符串:

SET key value          设置指定key的值        

GET key     获取指定key的值

SETEX key second value 设置指定key的值,并将key的过期时间设置为seconds

SETNX key value    只有在key不存在时才能设置key的值

哈希:

HSET key field value     将哈希表key中的字段field的值设为value      

HSET key field           获取存储在哈希表中的指定字段

HDEL key field 删除存储在 哈希表中的指定字段

HKEYS key 获取哈希表中的所有字段

HVALS key 获取哈希表中的所有值

字符串:

LPUSH key value1 [value2]	  将一个或多个值插入到列表头部

LRANG key start stop 获取列表指定范围内的元素(stop=-1为返回全部)

RPOP key 移除并获取列表最后一个元素

LLEN key 获取列表长度

集合:

SADD key member1 [member2]	  向集合添加一个或多个成员

SMEMBERS key 返回集合中的所有成员

SCARD key 返回给定所有集合的交集

SINTER key1 [key2] 返回所有给定集合的并集

SUNION key1 [key2] 返回所有给定集合的并集

SREM key member1 [member2] 删除集合中的一个或多个成员

有序集合:

ZADD key score1 member1 [score2 member2] 	 向有序集合添加一个或多个成员

ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合中指定区间的成员

ZINCRBY key increment member 有序集合中对指定成员的分数加上增量increment

ZREM key member1 [member2] 移除有序集合中的一个或多个成员

通用命令:

KEYS pattern							  查找所有符合给定模式(pattern)的key

EXISTS key 检查给定key是否存在

TYPE key 返回key所存储的值的类型

DEL key 该命令用于在key存在时删除key

使用方法:

字符串 String:

//存入对象
redisTemplate.opsForValue().set("user:" + user.getId(), user, Duration.ofMinutes(30));  
//获取对象
redisTemplate.opsForValue().get("user:" + id);

哈希 hash:

redisTemplate.opsForHash().put("user:1001", "name", "Alice");
redisTemplate.opsForHash().put("user:1001", "age", 25);
​
String name = (String) redisTemplate.opsForHash().get("user:1001", "name");

列表 list:

//添加元素
//从左边插入一个元素
redisTemplate.opsForList().leftPush("users:list", user);
//从左边批量插入多个元素
redisTemplate.opsForList().leftPushAll("users:list", user1, user2);
//从右边插入一个元素
redisTemplate.opsForList().rightPush("users:list", user);
//从右边批量插入多个元素
redisTemplate.opsForList().rightPushAll("users:list", user1, user2);
​
//获取列表范围
//获取整个列表(0 到 -1 表示全部)
List<Object> users = redisTemplate.opsForList().range("users:list", 0, -1);
//获取前3个元素
List<Object> firstThree = redisTemplate.opsForList().range("users:list", 0, 2);
//获取最后一个元素
List<Object> lastOne = redisTemplate.opsForList().range("users:list", -1, -1);
//获取列表长度
Long size = redisTemplate.opsForList().size("users:list");
​
// 弹出元素(移除并返回)
// 从左边弹出一个元素
Object leftUser = redisTemplate.opsForList().leftPop("users:list");
// 从右边弹出一个元素
Object rightUser = redisTemplate.opsForList().rightPop("users:list");
// 阻塞式弹出(BLPOP / BRPOP)——如果列表为空则等待,单位:秒
Object blockedUser = redisTemplate.opsForList().leftPop("users:list", 10, TimeUnit.SECONDS);
Object blockedRight = redisTemplate.opsForList().rightPop("users:list", 5, TimeUnit.SECONDS);
​
//删除元素
//移除列表中等于 value 的前 n 个元素
//count > 0 : 从头开始删除最多 count 个匹配项
//count < 0 : 从尾开始删除最多 |count| 个匹配项
//count = 0 : 删除所有匹配项
Long removedCount = redisTemplate.opsForList().remove("users:list", 1, user); // 删除第一个匹配的 user
Long removeAll = redisTemplate.opsForList().remove("users:list", 0, user);   // 删除所有匹配的 user
​
//获取指定索引位置的元素
//获取索引为 0 的元素(第一个)
Object first = redisTemplate.opsForList().index("users:list", 0);
//获取倒数第一个元素
Object last = redisTemplate.opsForList().index("users:list", -1);
​
//设置指定索引位置的元素
//将索引 index 处的元素设置为新值(必须存在该索引)
redisTemplate.opsForList().set("users:list", 2, updatedUser);
​
//截取并保留指定范围
//只保留列表中 [0, 9] 范围内的元素,其余删除(可用于分页缓存清理)
redisTemplate.opsForList().trim("users:list", 0, 9);
//清空整个列表
redisTemplate.opsForList().trim("users:list", 1, 0); // 巧妙技巧:起始 > 结束 → 清空

无序集合 set:

//存入集合
redisTemplate.opsForSet().add("users:set", "user");
//获取集合中所有值
Set<Object> userSet = redisTemplate.opsForSet().members("users:set");
//判断是否存在该值
Boolean isLiked = redisTemplate.opsForSet().isMember("users:set", "user");
//获取集合大小
Long count = redisTemplate.opsForSet().zCard("users:set"); // 推荐写法
// 删除一个用户
redisTemplate.opsForSet().remove("users:set", "user");
// 删除多个用户
redisTemplate.opsForSet().remove("users:set", "user1", "user2");
// 删除所有匹配的值
Object[] toRemove = {"user1", "user2"};
redisTemplate.opsForSet().remove("users:set", toRemove);
//随机弹出并删除元素
Object luckyUser = redisTemplate.opsForSet().pop("users:set");
//求交集
Set<Object> commonFriends = redisTemplate.opsForSet().intersect("user:set1", "user:set2");
//求并集
Set<Object> allMembers = redisTemplate.opsForSet().union("user:set1", "user:set2");
//求差集
Set<Object> recommendUsers = redisTemplate.opsForSet().difference("user:set1", "user:set2");

有序集合 sorted set/zset:

//将值存入指定的有序集合
redisTemplate.opsForZSet().add(LEADERBOARD_KEY, userId.toString(), score); //key value 排序值
//获取第x个到第y个的该集合的所有值
//正序获得
redisTemplate.opsForZSet().rangeWithScores(LEADERBOARD_KEY, 0, topN - 1);
//逆序获得
redisTemplate.opsForZSet().reverseRangeWithScores(LEADERBOARD_KEY, 0, topN - 1);
//获取该值的存入顺序(从0开始)
redisTemplate.opsForZSet().reverseRank(LEADERBOARD_KEY, uid);
//获取排序值
redisTemplate.opsForZSet().score(LEADERBOARD_KEY, uid);
//增加排序值
redisTemplate.opsForZSet().incrementScore(LEADERBOARD_KEY, uid, increment);
//删除该值
redisTemplate.opsForZSet().remove(LEADERBOARD_KEY, uid);
//获取该有序集合存入值的数量
redisTemplate.opsForZSet().zCard(LEADERBOARD_KEY);
//获取区间内的值
redisTemplate.opsForZSet().reverseRangeByScoreWithScores(LEADERBOARD_KEY, min, max);
//删除区间内的值
redisTemplate.opsForZSet().removeRangeByScore(LEADERBOARD_KEY, min, max);

设置过期时间:

redisTemplate.expire("key", 10, TimeUnit.SECONDS);
redisTemplate.expireAt("key", new Date(System.currentTimeMillis() + 60000));

返回顶部

暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇