Redis基本数据类型String(字符串)基本API

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Redis 版,经济版 1GB 1个月
简介: Redis基本数据类型String(字符串)基本API

String(字符串)

 String类型使用场景:value除了是我们的字符串还可以是我们的数字,redis会自动帮我们辨别转化
  1. 计数器
  2. 统计多单位的数量
  3. 粉丝数,关注数,浏览量
  4. 对象缓存存储  

String类型常用方法

1 append  append  (key  给哪个键 string 追加什么内容)追加字符串,追加成功后返回当期这个key的长度, 如果当前追加的这个key不存在就新创建一个key

127.0.0.1:6379[2]> get name  #查看wyh
"wyh"
127.0.0.1:6379[2]> append name yyt #给wyh这个键拼接字符串
(integer) 6    #返回当前这个key追加内容后的长度
127.0.0.1:6379[2]> append name1 zhangsan #如果当前追加的这个key不存在就新创建一个key
(integer) 8 #返回当前这个key追加内容后的长度

   2 strlen  strlen (key)  查看某个key的长度

127.0.0.1:6379[2]> strlen name #查看某个key的长度
(integer) 6 #返回这个key的长度
127.0.0.1:6379[2]> strlen name2 #查看某个不存在key的长度
(integer) 0  #不存在的话返回0
127.0.0.1:6379[2]> set views 0
OK

3 incr  incr(key)自增 默认自增1

场景:浏览量,当前观看人数,都是它实现的,相当于java的i++

127.0.0.1:6379[2]> set views 0 #设置一个播放量
OK
127.0.0.1:6379[2]> incr views  #让views这个key自增(i++)
(integer) 1
127.0.0.1:6379[2]> incr views    #让views这个key自增(i++)
(integer) 2
127.0.0.1:6379[2]> incr views    #让views这个key自增(i++)
(integer) 3
127.0.0.1:6379[2]> incr views    #让views这个key自增(i++)
(integer) 4
127.0.0.1:6379[2]> get views    #查看这个key
"4"

4 decr  decr(key)自减,默认每次减少1,可以为负数

127.0.0.1:6379[2]> decr views #让views这个key自减1
(integer) 3
127.0.0.1:6379[2]> decr views  #让views这个key自减1
(integer) 2
127.0.0.1:6379[2]> decr views  #让views这个key自减1
(integer) 1
127.0.0.1:6379[2]> decr views  #让views这个key自减1
(integer) 0
127.0.0.1:6379[2]> decr views  #让views这个key自减1
(integer) -1 #可以为负数
127.0.0.1:6379[2]> get views #查看views这个Key
"-1"

5 incrby incrby (key) (numb)让某个键一次性步长几个长度

127.0.0.1:6379[2]> incrby views 10 #一次性步长10
(integer) 9

6 decrby decrby (key) (numb)让某个键一次性步减几个长度

127.0.0.1:6379[2]> decrby views 10 #一次性步减10
(integer) -1

7 range  range (key) (index从哪里开始,长度也是从0开始的) (截取几位)查看区间指定的值,类似substring截取,如果截取的这个参数为-1显示全部的字符串,其实和get key是一样的作业

127.0.0.1:6379[2]> set key1 hello,weiyihe #创建一个key
OK
127.0.0.1:6379[2]> getrange key1 0 3 #查看区间指定的值(从0开始,数3位,也就是前四位)
"hell"
127.0.0.1:6379[2]> getrange key1 0 -1 ##如果截取的这个参数为-1显示全部的字符串 和get key是一样的
"hello,weiyihe"

8 setrange setrange(key)(index)(value)把key按照指定的下表替换成指定的值

其实就是java中的replace替换

127.0.0.1:6379[2]> set key3 abc #设置一个新的key
OK
127.0.0.1:6379[2]> setrange key3 0 x #把key3按照指定的下表和值进行替换(把第0位换成x)
(integer) 3 #替换之后得到最终结果的长度
127.0.0.1:6379[2]> get key3 #
"xbc" # 查看key3
127.0.0.1:6379[2]> setrange key3 0 xxx # #把key3按照指定的下表和值进行替换(把第0位换成xxx)
(integer) 3 # 替换之后得到最终结果的长度
127.0.0.1:6379[2]> get key3 #查看key3
"xxx"

9 setex  settex(set with expire) 设置过期时间  setex(key) (time,存活时间,一般都是秒s)(key的value)

127.0.0.1:6379[2]> setex key3 30 "hello" #设置一个值为hello的键Key3,有效期30秒
OK
127.0.0.1:6379[2]> get key3 #查看key3
"hello"
127.0.0.1:6379[2]> ttl key3 #查看当期key3的有效时间
(integer) 19  #19s(秒)
127.0.0.1:6379[2]> ttl key3 #查看当期key3的有效时间
(integer) 18 #18s(秒)
127.0.0.1:6379[2]> get key3 #查看key3
(nil) #没了(过期了)
127.0.0.1:6379[2]> ttl key3  #查看key3
(integer) -2 #没了(过期了)

11 setnx settex(set if not exist) 不存在设置 (在分布式锁中经常使用) setnx (key) (key 的value)成功的话返回1(一般成功就创建一个新的key,或者把key的value改变),不成功返回0,不成功因为设置那个key已经存在了

127.0.0.1:6379[2]> setnx mykey redis #设置一个叫mykey的键
(integer) 1 #成功返回1
127.0.0.1:6379[2]> get key3
(nil)
127.0.0.1:6379[2]> setnx mykey mysql #重新设置mykey的键,不成功,因为已经有了一个叫mykey的key
(integer) 0  #不成功返回0
127.0.0.1:6379[2]> get mykey #查看key mykey
"redis"
127.0.0.1:6379[2]> setnx mykey1 mysql #设置一个叫mykey1的键
(integer) 1 #成功,因为没有叫mykey1的key
127.0.0.1:6379[2]> get mykey1 #查看key mykey1
"mysql"

12 mset mset (k1 v1)( k2 v2) (k3 v3)一次性设置多个键值对

127.0.0.1:6379[2]> mset k1 v1 k2 v2 k3 v3 #一次性设置三个键值对(k1 v1)( k2 v2) (k3 v3)
OK
127.0.0.1:6379[2]> keys * #查看全部的值
1) "k3"
2) "k2"
3) "k1"

13 mget mget (k1 k2 k3)一次性获取多个key的值

127.0.0.1:6379[2]> mget k1 k2 k3 #一次性获取多个key的值
1) "v1"
2) "v2"
3) "v3"

14 msetnx  msetnx(key value)

msetnx是一个原子性操作(要么全部成功,要么全部失败)

127.0.0.1:6379[2]> mset k1 v1 k2 v2 k3 v3 #一次性获取多个key的值
OK
127.0.0.1:6379[2]> keys #查看全部的key
1) "k3"
2) "k2"
3) "k1"
127.0.0.1:6379[2]> mget k1 k2 k3 #一次查看三个key
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379[2]> msetnx k1 v1 k4 v4 #注意,这时候k1 v1已经存在,但是k4 v4不存在,返回结果为0失败,说明该操作具有原子性(要么全部成功,要不全部失败)
(integer) 0 #操作失败
127.0.0.1:6379[2]> get k4 #查看key4
(nil) #没有key4

15 msetnx 扩展

开发场景:一般创建对象 set user:1{name:"张三",age:10}设置一个user:1对象.它的值为一个json字符串来保存一个对象

这里的key是一个巧妙的设计 user:{id}:{filed}如此设计在redis中是完全可以的

127.0.0.1:6379[2]> mset user:1:name zhangsan user:1:age 10  #设置一个user1对象,它的name是zhangsan,age是10
OK
127.0.0.1:6379[2]> mset user:2:name lisi user:2:age 20 #设置一个user2对象,它的name是lisi,age是20
OK
127.0.0.1:6379[2]> mget user:1:name user:1:age #获取user1对象的name和age
1) "zhangsan"
2) "10"
127.0.0.1:6379[2]> mget user:2:name user:2:age #获取user2对象的name和age
1) "lisi"
2) "20"
127.0.0.1:6379[2]> mset user1:name zhangsan user1:age 10  #创建一个user1多key,json字符串的值
OK
127.0.0.1:6379[2]> get user1:name #单个获取user1的name
"zhangsan"
127.0.0.1:6379[2]> get user1:age #单个获取user1的age
"10"
127.0.0.1:6379[2]> mget user1:age user1:name #一次性获取m1的name和age
1) "10"
2) "zhangsan"

16 getset  getset(key)(value)  先get再set,如果不存在值则返回null,如果存在值则获取原来的值并且设置新的值

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2天前
|
存储 NoSQL Redis
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
10 1
|
4天前
|
C++ 容器
C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)
C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)
13 1
|
5天前
|
JavaScript 前端开发 索引
JavaScript有7个数据类型:Number, String, Boolean, Null, Undefined, Symbol(BES6)和BigInt(ES10)组成基本类型
【6月更文挑战第25天】JavaScript有7个数据类型:Number, String, Boolean, Null, Undefined, Symbol(BES6)和BigInt(ES10)组成基本类型,而Object包括Array、Function等是引用类型。Objects可以包含键值对,Array是特殊的Object。Functions也是对象。`null`和`undefined`被视为特殊的原始值。
11 1
|
6天前
|
存储 缓存 Java
JavaSE 字符串String及相关API StringBuilder StringJoiner 底层原理 详解
JavaSE 字符串String及相关API StringBuilder StringJoiner 底层原理 详解
12 2
|
15天前
|
编译器 C++
【C++进阶】深入STL之string:模拟实现走进C++字符串的世界
【C++进阶】深入STL之string:模拟实现走进C++字符串的世界
15 1
|
17天前
|
JSON Java 数据格式
如何用String字符串生成JSONObject和JSONArray数据
如何用String字符串生成JSONObject和JSONArray数据
23 1
|
16天前
|
C++ 容器
【C++语言】String 类关键函数实现,手搓一个简单字符串类!
【C++语言】String 类关键函数实现,手搓一个简单字符串类!
|
23天前
|
Java 程序员 API
JavaSE——常用API(1/3)-包、String概述、String常用方法(length、charAt、遍历字符串、toCharArray......)
JavaSE——常用API(1/3)-包、String概述、String常用方法(length、charAt、遍历字符串、toCharArray......)v
13 0
|
26天前
|
NoSQL Java Redis
【Redis】 Java操作Redis客户端命令——基础操作与字符串操作
【Redis】 Java操作Redis客户端命令——基础操作与字符串操作
|
7天前
|
Java UED
Java中String强转int:一种常见的错误和解决方法
在Java中将非数字字符串转换为整数会导致`NumberFormatException`。要解决这个问题,可以使用`try-catch`捕获异常,正则表达式验证数字格式,或利用异常信息提供错误提示。例如,`Integer.parseInt()`会因遇到非数字字符如`"123abc"`而抛出异常,但通过异常处理或正则`\\d+`可确保安全转换。记得在编程时避免直接强转,以防止程序异常中断。