redis的String类型的详解

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: redis的String类型的详解

 客户端命令

添加/修改

添加/修改

set key value

image.gif

添加(分布式锁,只有key不存在时生效)

setnx key value

image.gif

此时若多个客户端执行这个命令,只有一个成功,保证每次锁只有一个人拿到,只有这个人释放后, 其他人才能操作,但此时需要注意死锁。 (可以尝试通过expire命令给当前key设置过期时间,避免死锁)

添加/修改(多个)

mset key1 value1 key2 value2

image.gif

添加/修改(多个,分布式锁,只有key不存在时生效)

msetnx key value[key value …

image.gif

添加/修改(设置过期时间)

setex key time value

image.gif

如果 key 已经存在, setex命令将会替换旧的值,并设置过期时间

通过数据有效性控制业务行为,如:限制客户每4个小时才能投一次票,此时可以 set user:id 4*60*60 1

查询

获取key的值

get key

image.gif

获取key并删除

getdel key

image.gif

获取旧值并设置新值

getset key value

image.gif

获取key的值并设置过期时间

getex key

image.gif

获取key的值并清除过期时间

set key value KEEPTTL

image.gif

查询多个key的value

mget key1 key2

image.gif

如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil

返回key集合中的索引start和索引end之间的元素(包含start和end)

getrange key start end
            getrange k1 0 -1 返回集合中所有元素

image.gif

方法

获取key 所储存的字符串值的长度

strlen key

image.gif

当 key 储存的不是字符串值时,返回一个错误

追加

append key value

image.gif

如果 key 已经存在并且是一个字符串, append 命令将 value 追加到 key 原来的值的末尾 如果 key 不存在, append 就简单地将给定 key 设为 value ,就像执行 set key value 一样

修改指定位置的值

setrange key offset value

image.gif

127.0.0.1:6379> set k6 abcd1234 127.0.0.1:6379> setrange k6 1 xxx 127.0.0.1:6379> get k6 "axxx1234"

将 key 中储存的数字值增一

incr key

image.gif

若不存在,则赋值为"1" 如果字符串类型的值不能表示为数字、或者是其他类型,那么返回一个错误

将 key 中储存的数字值减一

decr key

image.gif

若不存在,则赋值为"-1" 如字符串类型的值不能表示为数字、或者是其他类型,那么返回一个错误

将key存储的数字值按照step进行增/减

incrby/decrby key step

image.gif

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 incrby/decrby 命令 如字符串类型的值不能表示为数字、或者是其他类型,那么返回一个错误

springboot操作string类型

引入

@Autowired
          private RedisTemplate redisTemplate;

image.gif

增加/修改

增加/修改

redisTemplate.opsForValue().set("name","jkw");

image.gif

添加(分布式锁,只有key不存在时生效)【key不存在为true,key存在为false】

Boolean flag=redisTemplate.opsForValue().setIfAbsent("name","jkw");

image.gif

添加/修改(多个)

Map map=new HashMap();
          map.put("k1","v1");
          map.put("k2","v2");
          redisTemplate.opsForValue().multiSet(map);

image.gif

添加/修改(多个,分布式锁,只有key不存在时生效)

Map map=new HashMap();
          map.put("k1","v1");
          map.put("k2","v2");
          redisTemplate.opsForValue().multiSetIfAbsent(map);

image.gif

修改(key存在时生效)【key存在为true,key不存在为false】

Boolean flag=redisTemplate.opsForValue().setIfPresent("name","jkw");

image.gif

同时设值过期时间(参数为:TimeUnit)

void set(K key, V value, long timeout, TimeUnit unit);
          Boolean setIfAbsent(K key, V value, long timeout, TimeUnit unit);
          Boolean setIfPresent(K key, V value, long timeout, TimeUnit unit);

image.gif

timeout:多少时间单位
          unit:时间单位
            TimeUnit.NANOSECONDS:纳秒
            TimeUnit.MICROSECONDS:微秒
            TimeUnit.MILLISECONDS:毫秒
            TimeUnit.SECONDS:秒种
            TimeUnit.MINUTES:分钟
            TimeUnit.HOURS:小时
            TimeUnit.DAYS:天

image.gif

同时设置过期时间(单位:Duration)

void set(K key, V value, Duration timeout);
          default void setIfAbsent(K key, V value, Duration timeout);
          Boolean setIfPresent(K key, V value, Duration timeout);

image.gif

timeout:时间单位,可链式调用
           Duration.ofDays(1):天
           Duration.ofHours(1):时
           Duration.ofMinutes(1):分
           Duration.ofSeconds(1):秒
           Duration.ofMillis(1):毫秒
           Duration.ofNanos(1):纳秒

image.gif

//过期时间是1天1小时
           redisTemplate.opsForValue().set("key","value", Duration.ofDays(1).ofHours(1));
           //过期时间是2天1小时
           redisTemplate.opsForValue().setIfAbsent("key","value", Duration.ofDays(2).ofHours(1));
           //过期时间是3天3秒钟
           redisTemplate.opsForValue().setIfPresent("key","value", Duration.ofDays(3).ofSeconds(3));

image.gif

查询

获取key的值

redisTemplate.opsForValue().get("name")

image.gif

批量获取值

List<String> list=new ArrayList<>();
            list.add("k1");
            list.add("k2");
            redisTemplate.opsForValue().multiGet(list);

image.gif

获取key并删除

redisTemplate.opsForValue().getAndDelete("key");

image.gif

获取旧值并设置新值

redisTemplate.opsForValue().getAndSet("key","value");

image.gif

获取key的值并设置过期时间(单位:TimeUnit)

redisTemplate.opsForValue().getAndExpire("key",1,TimeUnit.HOURS);

image.gif

获取key的值并设置过期时间(单位:Duration)

//过期时间是3天3小时
          redisTemplate.opsForValue().getAndExpire("key",Duration.ofDays(3).ofSeconds(3));

image.gif

获取key的值并清除过期时间

redisTemplate.opsForValue().getAndPersist("key");

image.gif

方法

追加字符串

redisTemplate.opsForValue().append("key","value");

image.gif

获得长度

redisTemplate.opsForValue().size("key");

image.gif

获得指定范围的字符串

redisTemplate.opsForValue().get("key",0,5);

image.gif

替换指定索引的内容

redisTemplate.opsForValue().set("key","value",0);

image.gif

自增1

redisTemplate.opsForValue().increment("key");

image.gif

自减1
          redisTemplate.opsForValue().decrement("key");
          自增指定整数
          redisTemplate.opsForValue().increment("key",3);
          自减指定整数
          redisTemplate.opsForValue().decrement("key",3);
          自增指定小数
          redisTemplate.opsForValue().increment("key",3.3);

image.gif


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
3天前
channelSftp.put(InputStream src, String dst, int mode);里的mode都是什么类型的
【5月更文挑战第15天】channelSftp.put(InputStream src, String dst, int mode);里的mode都是什么类型的
33 2
|
5天前
|
JavaScript 前端开发
TypeScript内置类型一览(Record<string,any>等等)(下)
TypeScript内置类型一览(Record<string,any>等等)
|
5天前
|
JavaScript
TypeScript内置类型一览(Record<string,any>等等)(中)
TypeScript内置类型一览(Record<string,any>等等)
|
5天前
|
JavaScript
TypeScript内置类型一览(Record<string,any>等等)(上)
TypeScript内置类型一览(Record<string,any>等等)
|
6天前
|
消息中间件 存储 负载均衡
Redis类型 Stream Bitfield
Redis类型 Stream Bitfield
12 0
|
6天前
|
NoSQL Java Unix
Redis基础操作 String List
Redis基础操作 String List
12 0
|
6天前
|
Java
Java String类型转换成Date日期类型
Java String类型转换成Date日期类型
|
6天前
|
消息中间件 数据采集 SQL
DataWorks操作报错合集之通过dataworks把表数据发送到kafka,表字段全是string类型如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
23 2
|
6天前
|
存储 NoSQL 安全
Redis入门到通关之Redis数据结构-String篇
Redis入门到通关之Redis数据结构-String篇
36 1
|
6天前
|
存储 缓存 NoSQL
Redis入门到通关之String命令
Redis入门到通关之String命令
19 0