1 简介

String 类型是 Redis 最基本的类型(与Memcache一样,其支持的操作与memcache的操作类似),一个 key 对应一个 value ,它的功能更丰富。设置可以存储二进制的,意思是 Redis 的 String 可以存储任何数据,比如 jpg 图片或者序列化的对象,一个键最大能存储 512 MB

2 应用场景

  • 计数器
  • 粉丝数
  • 直播平台
  • 浏览量统计
  • 对象缓存存储

3 增

设置key,语法:set key value

127.0.0.1:6379> set name zls
OK
127.0.0.1:6379> set name swbo  #第二次赋值会覆盖
OK

setnx(set if not exist) 不存在在设置(在分布式锁中常用)

127.0.0.1:6379> setnx mykey "redis"     # 返回1, mykey不存在直接创建mykey
(integer) 1
127.0.0.1:6379> setnx mykey "mongoDB"   # 返回0,如果mykey存在,创建失败
(integer) 0
127.0.0.1:6379> get mykey
"redis"
127.0.0.1:6379>

setex (set with expire) 设置过期时间

# 给key3设置过期时间为10s,值为hello,若key已经存在,会覆盖新的值
127.0.0.1:6379> setex key3 10 hello
OK
127.0.0.1:6379> ttl key3
(integer) 8
127.0.0.1:6379> get key3
"hello"
127.0.0.1:6379> ttl key3
(integer) -2
127.0.0.1:6379> get key3
(nil)
127.0.0.1:6379>

设置多个key,语法:mset key value [key value…]

127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3  # 同时设置多个值
OK
127.0.0.1:6379> mget k1 k2 k3           # 同时获取多个值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx k1 v1 k4 v4     # msetnx 是一个原子性操作,要么一起成功,要么一起失败
(integer) 0
127.0.0.1:6379> get k4
(nil)
127.0.0.1:6379> 

getset(设置值、取值同时进行)
先get然后再set

127.0.0.1:6379> getset db redis    # 如果不存在值,则返回 nil
(nil)
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> getset db mongodb   # 如果存在值,获取原来的值,并设置新的值
"redis"
127.0.0.1:6379> get db
"mongodb"
127.0.0.1:6379>

设置值同时设置生存时间

127.0.0.1:6379> set name songwanbo ex 100
OK
#以秒查询key剩余生存时间
127.0.0.1:6379> ttl name
(integer) 88

对象

set user:1 {name:zhangshan,age:3}  # 设置一个 user:1 对象,值为 json 字符串来保存一个对象 # 这里的key是一个巧妙的设计,user:{id}:{field} 如此设计在 Redis 中是完全ok的127.0.0.1:6379> mset user:1:name songwanbo user:1:age 23
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "songwanbo"
2) "23"
127.0.0.1:6379>

数量递归增加

127.0.0.1:6379> incr fans      #粉丝数加1
(integer) 1
#指定增加数值
127.0.0.1:6379> incrby fans 5  #粉丝数加5
(integer) 8

数量递减

127.0.0.1:6379> DECR fans      #粉丝数减1
(integer) -1
#指定递减数
127.0.0.1:6379> DECRBY fans 5  #粉丝数减5
(integer) -3

浮点增加

127.0.0.1:6379> incrbyfloat fans 0.6
"0.6"

4 删

#删除已有key,语法:del key
127.0.0.1:6379> DEL fans
127.0.0.1:6379> select 0 #选择0号数据库进行键值存取
127.0.0.1:6379> set name1 zhangsan
127.0.0.1:6379> set name2 lisi
127.0.0.1:6379> set name3 wangsu
127.0.0.1:6379> del name1 name2 name3

5 改

127.0.0.1:6379[1]> set k1 v1          # 设置值
OK
127.0.0.1:6379[1]> get k1             # 获取值
"v1"
127.0.0.1:6379[1]> keys *             # 获取所有的key
1) "k1"
127.0.0.1:6379[1]> EXISTS k1          # 判断某一个key是否存在
(integer) 1
127.0.0.1:6379[1]> APPEND k1 "hello"  # 追加(若该键不存在,则创建,若存在则追加)
(integer) 7
127.0.0.1:6379[1]> get k1
"v1hello"
127.0.0.1:6379[1]>

修改第 N 个字符串

示例1

127.0.0.1:6379[1]> get k1
"v1hello"
127.0.0.1:6379[1]> setrange k1 2 H  # 将第 2 个字符改为 H
(integer) 7
127.0.0.1:6379[1]> get k1  # 查看结果
"v1Hello"
127.0.0.1:6379[1]>

示例2

127.0.0.1:6379> set key2 "i love python"
OK
127.0.0.1:6379> get key2
"i love python"
127.0.0.1:6379>
127.0.0.1:6379> setrange key2 7 redis   # 替换指定位置开始的字符串(注意源字符串长度)
(integer) 13
127.0.0.1:6379> get key2
"i love redisn"
127.0.0.1:6379>

6 查

获取key值,语法:get key

127.0.0.1:6379[1]> get k1
"v1Hello"
127.0.0.1:6379[1]>

查看string类型的长度

127.0.0.1:6379[1]> STRLEN k1
(integer) 7
127.0.0.1:6379[1]>

字符串范围 range,语法:getrange key start end

注:索引从0开始计算,取值包含start和end索引的字母127.0.0.1:6379[1]> set key1 "hello,redis"   # 设置 key1 的值
OK
127.0.0.1:6379[1]> get key1
"hello,redis"
127.0.0.1:6379[1]> getrange key1 6 10   #截取字符串下标为 [6,10],是一个闭区间
"redis"
127.0.0.1:6379[1]> getrange key1 0 -1  # 获取全部的字符串,和 get key 是一样的
"hello,redis"
127.0.0.1:6379[1]> 

查看过期

  • TTL key 和秒相关的过期时间查询
  • PTTL key 和毫秒相关的过期时间查询
# 以秒查询key剩余生存时间
127.0.0.1:6379> ttl name
(integer) 8
# 以毫秒查询key剩余生存时间
127.0.0.1:6379> pttl name
(integer) 44016

获取多个key值,语法:mget key1 [key2…]

127.0.0.1:6379> mset name songwanbo age 20 gender m
OK
127.0.0.1:6379> mget name age gender
1) "songwanbo"
2) "20"
3) "m"
127.0.0.1:6379>

7 应用场景实现

  1. 粉丝数量增加,每点一次关注,都执行以下命令一次
127.0.0.1:6379[1]> set fans 0  # 初始粉丝量为0
OK
127.0.0.1:6379[1]> get fans
"0"
127.0.0.1:6379[1]> incr fans   # 自增1,粉丝数变为1
(integer) 1
127.0.0.1:6379[1]> incr fans
(integer) 2
127.0.0.1:6379[1]> get fans
"2"
  1. 取消关注则执行以下命令一次
127.0.0.1:6379[1]> decr fans  # 自减1,粉丝数减少1
(integer) 1
127.0.0.1:6379[1]> decr fans
(integer) 0
127.0.0.1:6379[1]> decr fans
(integer) -1
127.0.0.1:6379[1]> get fans
"-1"
127.0.0.1:6379[1]>
  1. 步长
# 刷粉丝
127.0.0.1:6379[1]> get fans
"-1"
127.0.0.1:6379[1]> incrby fans 10086   # 设置步长,指定增量
(integer) 10085
127.0.0.1:6379[1]> get fans
"10085"# 减少粉丝
127.0.0.1:6379[1]> get fans
"10085"
127.0.0.1:6379[1]> DECRBY fans 5     # 指定步长,设置每次减少数量
(integer) 10080
127.0.0.1:6379[1]> DECRBY fans 5
(integer) 10075
127.0.0.1:6379[1]> get fans
"10075"
127.0.0.1:6379[1]>

String字符串类型相关推荐

  1. C++中string字符串类型详解及常见方法分析

    因为C中除了字符数组以外没有直接与字符串相关的变量类型,在处理一些问题的时候不是很方便.所以C++提供新的数据类型--字符串类型(string类型),在使用方法上,它和char、int类型一样,可以用 ...

  2. string型c语言,C++中string字符串类型介绍

    1. 简介 C语言中通过字符相连已经基本创造出了字符串的常规操作,然而,字符串在C语言中并不是常规类型,而是一个类似于数组的结构,在C++中,通过模板类的操作创建了string类,这样的方法更适合于现 ...

  3. ElementUI中el-radio-group使用v-model绑定是属性为String字符串类型时不回显数据

    场景 结合el-radio-group元素和子元素el-radio可以实现单选组,在el-radio-group中绑定v-model,在el-radio中设置好label即可,无需再给每一个el-ra ...

  4. 1.2 String字符串和整型int的相互转换,valueOf() 、parse()和toString()

    String 在编程中被广泛使用,所以掌握 String 和 int 的相互转换方法是极其重要的.前面部分主要讲解了 String 转换 int 和 int 转换 String 方法,后面部分对 va ...

  5. python基础教程:数值与字符串类型

    Python3 中有六个标准的数据类型:Number(数字).String(字符串).List(列表).Tuple(元组).Sets(集合).Dictionary(字典). 不可变数据(四个):Num ...

  6. Java String字符串和整型int的相互转换

    String 在编程中被广泛使用,所以掌握 String 和 int 的相互转换方法是极其重要的. String转换为int String 字符串转整型 int 有以下两种方式: Integer.pa ...

  7. Java教程:Java String字符串和整型int的相互转换

    Java教程String 在编程中被广泛使用,所以掌握 String 和 int 的相互转换方法是极其重要的.本节前面部分主要讲解了 String 转换 int 和 int 转换 String 方法, ...

  8. Java - String字符串的部分操作

    String转换为int String 字符串转整型 int 有以下两种方式: Integer.parseInt(str) Integer.valueOf(str).intValue() 注意:Int ...

  9. python redis缓存_第二百九十五节,python操作redis缓存-字符串类型

    python操作redis缓存-字符串类型 首先要安装redis-py模块 python连接redis方式,有两种连接方式,一种是直接连接,一张是通过连接池连接 注意:以后我们都用的连接池方式连接,直 ...

最新文章

  1. python3 字符串 统计子字符数量 内置方法count
  2. LINUX共享内存使用常见陷阱与分析(转)
  3. 在你的计算机上使用qr码登录,如何在Android 10上使用QR码共享您的Wi-fi凭据 | MOS86...
  4. 配置mysql数据库时出再错误:LookupError No installed app with label admin(亲测)
  5. 全套支付宝系统架构(内部架构图)【收藏】
  6. 4W1T教程1 如何使用幻灯片
  7. 【AI视野·今日Robot 机器人论文速览 第二期】Mon, 7 Jun 2021
  8. selenium通过autoit实现上传和下载
  9. ASP.NET Core WebAPI控制器返回类型的最佳选项
  10. 采用C#泛型实现数据库之间的切换
  11. c#遍历匹配串口(向每个串口发数据,根据返回数据确定是否为所需串口)
  12. 用什么软件测试微信朋友圈被屏蔽,怎么检测朋友圈被屏蔽?清师傅帮你
  13. 宝塔+青龙面板+机器人+诺兰
  14. 修改apk显示或隐藏桌面图标
  15. java编写car类_java编写一个汽车类,有属性:品牌、型号、排量、速度,有方法:启动、加速、转弯、刹车、息火...
  16. Docker版本变化说明
  17. NLP从词袋到Word2Vec的文本表示
  18. HWAutoTool 自动化工具操作手机模拟器文档介绍
  19. 交换机技术 路由器OSPF路由配置
  20. Harbor集成Clair镜像安全扫描原理探知

热门文章

  1. 拉格朗日松弛算法在组合优化问题中的应用
  2. base64转cer_常见证书格式及相互转换
  3. 【牛客网SQL篇】非技术快速入门
  4. pr里去频闪的插件叫什么_Ae/Pr视频去闪烁插件 REVisionFX DE:Flicker v1.4.7 CE
  5. 用Nginx禁止国外IP访问我的网站...
  6. 如何设计出更好的 API ?
  7. php 日历排班的例子,基于ThinkPHP实现的日历功能实例详解
  8. css实现鼠标滑过展现菜单
  9. mysql 批量更新数据 备份_mysql 批量更新与批量更新多条记录的不同值实现方法...
  10. 高德地图API学习二、获取定位数据