redis的String类型的详解

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容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
相关文章
|
1月前
|
存储 消息中间件 NoSQL
Redis数据结构:List类型全面解析
Redis数据结构——List类型全面解析:存储多个有序的字符串,列表中每个字符串成为元素 Eelement,最多可以存储 2^32-1 个元素。可对列表两端插入(push)和弹出(pop)、获取指定范围的元素列表等,常见命令。 底层数据结构:3.2版本之前,底层采用**压缩链表ZipList**和**双向链表LinkedList**;3.2版本之后,底层数据结构为**快速链表QuickList** 列表是一种比较灵活的数据结构,可以充当栈、队列、阻塞队列,在实际开发中有很多应用场景。
|
2月前
|
NoSQL Redis
Redis 字符串(String)
10月更文挑战第16天
43 4
|
2月前
|
消息中间件 存储 监控
redis 的List类型 实现 排行榜
【10月更文挑战第8天】
39 2
|
2月前
|
存储 NoSQL Redis
redis-set类型
【10月更文挑战第6天】
44 1
|
2月前
|
数据可视化 Java
让星星月亮告诉你,通过反射创建类的实例对象,并通过Unsafe theUnsafe来修改实例对象的私有的String类型的成员属性的值
本文介绍了如何使用 Unsafe 类通过反射机制修改对象的私有属性值。主要包括: 1. 获取 Unsafe 的 theUnsafe 属性:通过反射获取 Unsafe类的私有静态属性theUnsafe,并放开其访问权限,以便后续操作 2. 利用反射创建 User 类的实例对象:通过反射创建User类的实例对象,并定义预期值 3. 利用反射获取实例对象的name属性并修改:通过反射获取 User类实例对象的私有属性name,使用 Unsafe`的compareAndSwapObject方法直接在内存地址上修改属性值 核心代码展示了详细的步骤和逻辑,确保了对私有属性的修改不受 JVM 访问权限的限制
56 4
|
2月前
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
27 3
|
2月前
|
消息中间件 分布式计算 NoSQL
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
27 2
|
1月前
|
存储 NoSQL 关系型数据库
Redis的ZSet底层数据结构,ZSet类型全面解析
Redis的ZSet底层数据结构,ZSet类型全面解析;应用场景、底层结构、常用命令;压缩列表ZipList、跳表SkipList;B+树与跳表对比,MySQL为什么使用B+树;ZSet为什么用跳表,而不是B+树、红黑树、二叉树
|
3月前
|
存储 JSON NoSQL
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
这篇文章是关于Redis基本数据结构的学习笔记,包括了String、Hash、Set、List和SortedSet的介绍和常用命令。文章解释了每种数据结构的特点和使用场景,并通过命令示例演示了如何在Redis中操作这些数据结构。此外,还提供了一些练习示例,帮助读者更好地理解和应用这些数据结构。
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
|
2月前
|
消息中间件 NoSQL Kafka
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
154 0