redis常用命令与常用api
文章目录
- 前言
- 一、基本数据类型
- 二、数据类型相关命令与api
- 1.STRING
- 2.列表
- 3.集合
- 4.散列
- 5.有序集合
- 三、其他命令
- 1.键的过期时间
- 总结
前言
本篇主要记录redis的常用命令跟java开发中常用到的api
一、基本数据类型
redis可以存储5种不同数据结构类型之间的映射
结构类型 | 结构存储的值 | 结构的读写能力 |
---|---|---|
STRING | 可以是字符串、整数或者浮点数 | key-value形式;对整数和浮点数执行自增或者自减操作 |
LIST | 一个链表,链表上的节点都包含了字符串 | 链表两端插入或者弹出;对链表进行修建;读取单个或者多个元素;根据值查找或者删除 |
SET | 元素不重复、无序的collection | 添加、获取、删除单个元素;检查元素是否存在;计算交集、并集、差集;从集合中随机取 |
HASH | 包含字符串的无序散列表 | 添加、获取、移除单个键值对;获取所有键值对 |
ZSET(有序集合) | 字符串成员与浮点数分值之间的有序映射,元素的排列顺序由分值决定 | 添加、获取、删除单个元素;根据分值范围(range)或者成员来获取元素 |
二、数据类型相关命令与api
引入坐标依赖
<dependencyManagement><dependencies><!-- Spring Boot --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
1.STRING
命令 | 用例和描述 |
---|---|
INCR | INCR key-name 将键存储的值加上1 |
DECR | DECR key-name 将键存储的值减1 |
INCRBY | INCRBY key-name amount 将键值存储的值加上amount |
DECRBY | DECRBY key-name amount 将键值存储的值减去整数amount |
INCRBYFLOAT | INCRBYFLOAT key-name amount 将键值对的值加上浮点数amount |
命令 | 用例和描述 |
---|---|
APPEND | APPEND key-name value 将值value追加到给定键key-name当前存储的值得末尾 |
GETRANGE | GETRANGE key-name start end 获取一个由偏移量start至偏移量end范围内所有字符组成的子串,包括start 和end |
STRLEN | STRLEN key-name 返回字符串长度 |
SETRANGE | SETRANGE key-name offset value 将从offset偏移量开始的子串设置给定的值 |
GETBIT | GETBIT key-name offset 将字符串看成是二进制位串 并返回位串中偏移量位offset的二进制位的值 |
SETBIT | SETBIT key-name offset value 将字符串看成是二进制位串 并将偏移量位offset的值设置成value |
@Component
public class RedisUtils {@Autowiredprivate RedisTemplate<String, String> redisTemplate;public String get(String key) {return redisTemplate.opsForValue().get(key);}public void set(String key, String value) {redisTemplate.opsForValue().set(key, value);}public long incr(String key, Long delta) {return redisTemplate.opsForValue().increment(key, Optional.ofNullable(delta).orElse(1L));}public long decr(String key, Long delta) {return redisTemplate.opsForValue().decrement(key, Optional.of(delta).orElse(1L));}public int append(String key, String val) {return redisTemplate.opsForValue().append(key, val);}public String getRange(String key, int start, int end) {return redisTemplate.execute((RedisCallback<String>) (connection) -> {byte[] range = connection.getRange(key.getBytes(StandardCharsets.UTF_8), start, end);return Optional.ofNullable(range).map(r -> new String(range)).orElse(null);});}
}
2.列表
命令 | 用例和描述 |
---|---|
RPUSH | RPUSH key-name value [value …] 将一个或者多个值推入到右端 |
LPUSH | LPUSH key-name value [value …] 将一个或者多个值推入到左端 |
RPOP | RPOP key-name 移除并返回列表最右端的元素 |
LPOP | LPOP key-name 移除并返回列表最左端的元素 |
LINDEX | LINDEX key-name offset 返回列表偏移量为offset的元素 |
LRANGE | LRANGE key-name start end 返回列表从start偏移量到end偏移量范围内的所有元素,包含start和end |
LTRIM | LTRIM key-name start end 对列表进行修剪,只保留从start偏移量到end偏移量范围的元素,包含start和end |
命令 | 用例和描述 |
---|---|
BLPOP |
BLPOP key-name [key-name …] timeout 从第一个非空列表中弹出位于最左端的元素 或者timeout秒内阻塞并等待可弹出元素出现 |
BRPOP |
BLPOP key-name [key-name …] timeout 从第一个非空列表中弹出位于最右端的元素 或者timeout秒内阻塞并等待可弹出元素出现 |
RPOPLPUSH |
RPOPLPUSH source-key desc-key 从source-key 列表中弹出位于最右端的元素 并将这个元素从左端推入到desc-key列表中,并向用户返回这个元素 |
BRPOPLPUSH |
RPOPLPUSH source-key desc-key timeout 从source-key 列表中弹出位于最右端的元素 并将这个元素从左端推入到desc-key列表中,并向用户返回这个元素;如果source-key为空,在timeout秒之内等等可弹出元素 |
public long rpush(String key, Collection<String> values) {return redisTemplate.opsForList().rightPushAll(key, values.toArray(new String[0]));}public String rpop(String key) {return redisTemplate.opsForList().rightPop(key);}public Collection<String> lrange(String key, long start, long end) {return redisTemplate.execute((RedisCallback<List<String>>) connection -> {List<byte[]> bytes = connection.lRange(key.getBytes(StandardCharsets.UTF_8), start, end);return Optional.ofNullable(bytes).map(each -> each.stream().map(String::new).collect(Collectors.toList())).orElse(null);});}public Collection<String> brpop(String key, int timeout) {return redisTemplate.execute((RedisCallback<List<String>>) connection -> {List<byte[]> bytes = connection.bRPop(timeout, key.getBytes(StandardCharsets.UTF_8));return Optional.ofNullable(bytes).map(each -> each.stream().map(String::new).collect(Collectors.toList())).orElse(null);});}
3.集合
命令 | 用例和描述 |
---|---|
SADD |
SADD key-name item [item …] 将一个或者多个元素添加到集合里面, 并返回被添加到元素当中原本并不存在于集合里面的元素数量 |
SREM | SREM key-name item [item …] 从集合里面移除一个或者多个元素,并返回被移除元素的数量 |
SISMEMBER | SISMEMBER key-name item 检查元素item是否存在于集合key-name里 |
SCARD | SCARD key-name 返回集合包含的元素的数量 |
SMEMBERS | SMEMBERS key-name 返回集合包含的所有元素 |
SRANDMEMBER |
SRANDMEMBER key-name count 从集合中随机返回一个或多个元素;count为正数时,返回的随机数不会重复, 为负数时,返回的随机元素可能会出现重复 |
SPOP | SPOP key-name 随机移除集合中的一个元素,并返回被移除的元素 |
SMOVE | SMOVE source-key dest-key item 将item从集合source-key移到dest-key中;成功移除则返回1,否则返回0 |
命令 | 用例和描述 |
---|---|
SDIFF | SDIFF key-name [key-name …] 返回存在于第一集合但不存在其他集合中的元素 |
SDIFFSTORE | SDIFFSTORE dest-key key-name [key-name …] 将存在第一集合但不存在其他集合的元素存储到dest-key中 |
SINTER | SINTER key-name [key-name …] 返回同时存在于所有集合中的元素 |
SINTERSTORE | SINTERSTORE dest-key key-name [key-name …] 将交集存到dest-key中 |
SUNION | SUNION key-name [key-name …] 返回给定key的并集 |
SUNIONSTORE | SUNIONSTORE dest-key key-name [key-name …] 将并集存到dest-key中 |
ZINTERSTORE | ZINTERSTORE dest-key key-count key [key …] [WEIGHTS weight [weight …]][AGGREGATE SUM|MIN|MAX] |
public long sadd(String key, Collection<String> values) {return redisTemplate.opsForSet().add(key, values.toArray(new String[0]));}public long size(String key, String item) {return redisTemplate.opsForZSet().size(key);}public boolean sIsExits(String key, String value) {return redisTemplate.execute((RedisCallback<Boolean>) con -> {return con.sIsMember(key.getBytes(StandardCharsets.UTF_8), value.getBytes(StandardCharsets.UTF_8));});}public Collection<String> sMembers(String key) {return redisTemplate.opsForSet().members(key);}public Collection<String> sDiff(String key1, String key2) {return redisTemplate.opsForSet().difference(key1, key2);}public Collection<String> sInter(String key1, String key2) {return redisTemplate.opsForSet().intersect(key1, key2);}public Collection<String> sUnion(String key1, String key2) {return redisTemplate.opsForSet().union(key1, key2);}
4.散列
命令 | 用例和描述 |
---|---|
HMGET | HMGET key-name key [key …]从散列中取一个或多个键的值 |
HMSET | HMSET key-name key value [key value] 为散列里面的一个或多个键设置值 |
HDEL | HDEL key-name key [key …] 删除散列里面的一个或多个键值对,返回成功找到并并删除的键值对数量 |
HLEN | HLEN key-nam 返回散列包含的键值对数量 |
命令 | 用例和描述 |
---|---|
HEXISTS | HEXISTS key-name key 检查给定键是否存在于散列表中 |
HKEYS | HKEYS key-name 获取散列包含的所有的键 |
HVALS | HVALS key-name 获取散列包含所有的值 |
HGETALL | HGETALL key-name 获取散列包含所有的键值对 |
HINCRBY | HINCRBY key-name key increment 将键key存储的值加上整数increment |
HINCRBYFLOAT | HINCRBYFLOAT key-name key increment 将键key存储的值加上浮点数increment |
public void hmSet(String key, Map<String, String> vals) {redisTemplate.opsForHash().putAll(key, vals);}public String hmGet(String key, String field) {return String.valueOf(redisTemplate.opsForHash().get(key, field));}public long hLen(String key) {return redisTemplate.opsForHash().size(key);}public Collection<String> hVals(String key) {List<Object> values = redisTemplate.opsForHash().values(key);return values.stream().map(String::valueOf).collect(Collectors.toList());}public Collection<String> hKeys(String key) {Set<Object> keys = redisTemplate.opsForHash().keys(key);return keys.stream().map(String::valueOf).collect(Collectors.toSet());}
5.有序集合
命令 | 用例和描述 |
---|---|
ZADD | ZADD key-name score member [score member …] 将带有给定分值的成员添加到有序集合里面 |
ZREM | ZREM key-name member [member …] 从有序集合中移除给定的成员,并返回被移除成员的数量 |
ZCARD | ZCARD key-name 返回有序集合包含的成员数量 |
ZINCRBY | ZINCRBY key-name increment member 将member成员的分支加上increment |
ZCOUNT | ZCOUNT key-name min max 返回分支介于min和max之间的成员数量 |
ZRANK | ZRANK key-name member 返回成员member在有序集合中的排名,排名按照从小到大 |
ZREVRANK | ZREVRANK key-name member 返回有序集合里成员member的排名,成员按照分值从大到小排列 |
ZSCORE | ZSCORE key-name member 返回成员的分值 |
ZRANGE |
ZRANGE key-name start stop [WITHSCORES] 返回有序集合中排名介于start和stop之间的成员。排名从低到高 如果有[WITHSCORES],成员的分值也一并返回 |
ZREVRANGE | ZREVRANGE key-name start stop [WITHSCORES] 排名从高到低 |
命令 | 用例和描述 |
---|---|
ZRANGEBYSCORE |
ZRANGEBYSCORE key min max[WITHSCORES][LIMIT offset count] 返回有序集合中分支介于min和max之间的所有成员 |
ZREVRANGEBYSCORE |
ZREVRANGEBYSCORE key min max [WITHSCORES][LIMIT offset count] 获取有序集合中分支介于min和max之间的所有成员,从大到小的顺序 |
ZREMRANGEBYRANK | ZREMRANGEBYRANK key-name start stop 移除有序集合中排名介于start 和stop之间的所有成员 |
ZREMRANGEBYSCORE | ZREMRANGEBYSCORE key-name min max 移除有序集合中分值介于min和max之间的所有成员 |
public boolean zAdd(String key, String value, double score) {return redisTemplate.opsForZSet().add(key, value, score);}// 返回在有序集合中的排名,分值从小到大public long zRank(String key, String member) {return redisTemplate.opsForZSet().rank(key, member);}// 返回集合中排名介于start和end之间的成员,分值从低到高public Collection<String> zRange(String key, int start, int end) {return redisTemplate.opsForZSet().range(key, start, end);}// 获取有序集合中分支介于min和max之间的所有成员,从大到小的顺序public Collection<String> zRangeByScore(String key, int min, int max, int offset, int count) {Set<ZSetOperations.TypedTuple<String>> all = redisTemplate.opsForZSet().rangeByScoreWithScores(key, min, max, offset, count);return Optional.ofNullable(all).map(e -> e.stream().map(ZSetOperations.TypedTuple::getValue).collect(Collectors.toSet())).orElse(null);}
三、其他命令
1.键的过期时间
命令 | 用例和描述 |
---|---|
PERSIST | PERSIST key-name 移除键的过期时间 |
TTL | TTL key-name 查看给定键距离过期还有多少秒 |
EXPIPE | EXPIPE key-name seconds 让给定键在指定的秒数之后过期 |
EXPIPEAT | EXPIPEAT key-name timestamp 将给定键的过期时间设置为给定的UNIX时间戳 |
PTTL | PTTL key-name 查看给定键过期时间还有多少秒 |
总结
本篇只要总结了常用命令 和开发过程中长用到的操作api
redis常用命令与常用api相关推荐
- Manjaro KDE 21.2.5安装后配置、yay常用命令、常用软件安装及主题美化(2022.04.18)
Manjaro KDE 21.2.5安装后配置.yay常用命令.常用软件安装及主题美化(2022.01.23) 结果展示 基本配置 关于 manjaro 的安装这里不再赘述了,安装的时候选择闭源驱动无 ...
- 百度谷歌雅虎搜索引擎常用命令,搜索引擎常用命令
百度谷歌雅虎搜索引擎常用命令,搜索引擎常用命令 intitle命令: intitle的含义在于搜索网页标题中含有的关键词,例如想搜索标题中含有"it"的内容,就搜索intitle: ...
- Zookeeper常用命令行及API
一.Zookeeper常用命令行 1.启动zookeeper客户端(在启动zookeeper集群后启动进行调试) zkCli.sh 2.查看帮助.操作历史 help.history 3.查看当前Zno ...
- kafka java api 删除_Kafka入门系列—6. Kafka 常用命令及Java API使用
常用命令 启动Zookeeper ./zkServer.sh start-foreground 可选参数: ./zkServer.sh {start|start-foreground|stop|res ...
- redis常用命令getex_Redis 常用命令篇(末尾含不常用)
设置值 set key value [ex seconds] [px milliseconds] [nx|xx] EX seconds : 将键的过期时间设置为 seconds 秒. 执行 SET k ...
- linux 入门 及一些常用命令及常用软件安装
Linux入门: ------------------------------------------------------------------------- 1.Linux的安装方式: ...
- mysql常用命令orderby_常用mysql命令大全
一.连接MySQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1.例1:连接到本机上的MYSQL. 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -ur ...
- 计算机网络管理的常用命令,网络管理常用命令图文详解.pdf
网络工程师必备 – 网络管理常用命令图文详解 网络工程师必备 网络管理常用命令 图文详解 V1.0 V1.0 包含 ping.ipconfig.netstat.nbtstat.tracert. pat ...
- linux常用命令_Linux常用命令全称
从事IT行业的很多人都会使用Linux常用命令,但是知道这些常用命令全称的人并不多,让我们来看看这些常用命令对应的全称吧! 必备Linux命令和C语言基础_C语言_嵌入式开发工程师-创客学院www. ...
- docker常用命令_docker常用命令整理
docker常用命令整理 代码狂魔 • 5 天前 • 技术积累 • 14 • 0 前面已经把docker是什么和 docker怎么安装已经写了,现在我将常用命令做一个整理,方便日后查阅 常用命令 do ...
最新文章
- vmware虚拟机启动centOs黑屏
- 网络爬虫介绍||为什么学网络爬虫
- centos7配置 console口_玩转KVM-一招打开vm的console口
- Java的自动装箱与自动拆箱
- 为什么说中国式报表特殊-5.4 填报
- 修改autor后面邮箱_如何修改LOL手游昵称
- 斗鱼递交私有化退市文件 与虎牙合并暂无完成时间表
- linux ssh 域,Linux SSH 与 SCP命令简述
- Linux常用到的指令汇总
- 计算机网络保密管理十个严禁,涉密网络保密管理规定
- 对COM组件的调用返回了错误HRESULT E_FAIL
- C++11线程的生命周期
- PWM整流器仿真。 在simulink中搭建了PWM整流器,采用电压电流双闭环控制,实现了网侧电压与电流同相位,单位功率因数运行
- web网站整体变灰色仅仅需要两行代码
- Shell - cp
- 金山打字游戏c语言代码,一天练习一个小C/C++程序(一) 控制台版“金山打字”游戏...
- nasm做一个简单的操作系统写字本(1)
- 乌合之众-大众心理研究(五)
- 这四十年来的香港歌坛在唱些什么,“南中国听歌最多”的数据分析师带你一探究竟...
- TXSQL:云计算时代数据库核弹头——云+未来峰会开发者专场回顾 1