当前位置: 首页 > news >正文

Redis——String类型详解

概述

Redis中的字符串直接按照二进制的数据存储,不会有任何的编码转换,因此存放什么样,取出来的时候就什么样。而MySQL默认的字符集是拉丁文,如果插入中文就会失败

Redis中的字符串类型不仅可以存放文本数据,还可以存放整数,JSON,xml,图片,视频,音频等等(但是音频视频的体积很大,Redis中对String类型限制大小为512mb)

常用命令

SET

通过自动补全可以看到set命令的完整语法
在这里插入图片描述
Redis文档中语法格式说明:

符号解释
[ ]代表可选项,[ ]和[ ]之间可以同时存在
|代表或者的意思,多个|只能出现一个

value后面的ex|px代表着过期时间
也就是说

set key value ex 10

等价于

set key value
expire key 10

通过简化代码数量,减少网络通信的次数,提升显效率
并且,一句代码还可以保证原子性,Redis分布式锁中会有所体现,后面的blog会详细讲解
在这里插入图片描述
除此以外,还可以这样写set命令

setnx
setex

如果key存在,新的value覆盖了旧的value,数据的类型可能会被改变,key的生存时间也会失效

演示代码

使用flushall可以清除Redis中所有key
在这里插入图片描述

ex

在这里插入图片描述

nx

在这里插入图片描述

xx

在这里插入图片描述

setnx

setnx key seconds

在这里插入图片描述

setex

setex key value seconds

在这里插入图片描述

psetex

psetex key millionseconds

在这里插入图片描述

GET

获取key对应的value
在这里插入图片描述
需要注意的是,get只适用于字符串类型,如果是其他类型则会报错
在这里插入图片描述

MSET

在这里插入图片描述

一次插入多个键值对,key和value交替写,时间复杂度O(N),N是key的数量

MGET

在这里插入图片描述
一次获取多个value,时间复杂度O(N),N是key的数量
在这里插入图片描述

增减命令

将string类型的value当作数字,进行加减操作,时间复杂度都是O(1)

命令操作
incrvalue + 1
incrbyvalue + n
decrvalue - 1
decrbyvalue - n
incrbyfloatvalue +/- 小数

incr

incr key

此时的key必须是一个64位内的整数,操作的返回值就是value+1后的结果(相当于++i)
在这里插入图片描述
如果key不是合理整数则报错
在这里插入图片描述
如果直接incr一个不存在的key,那么就会把这个key的value当作0
在这里插入图片描述

incrby

incrby key increment

在这里插入图片描述
同理,如果针对一个不存在的key进行incrby,那么会将这个key的value当作0处理

decr

逻辑和incr一致

decr key 

decrby

逻辑和incrby一致

decrby key decrement

incrbyfloat

其他逻辑和incrby一致,但是由于没有decrbyfloat,因此只能通过incrbyfloat key -n的操作来实现减法

incrbyfloat key increment

append

如果key存在,拼接key对应的value和给定字符串的内容,返回拼接完的字符串有多少个字节(utf8中的一个汉字通常是3个字节)

append key value

在这里插入图片描述
如果key不存在,那么和直接使用set一样
在这里插入图片描述
如果插入汉字,取出的时候客户端不会自动翻译二进制数据,而是将二进制转换为十六进制
在这里插入图片描述
可以在Redis启动的时候加上–raw的选项,就可以解决上述问题了,退出Redis使用ctrl + d
在这里插入图片描述

getrange

相当于Java中的substring,切分value中的部分字符串,范围由start和end确定(左闭右闭区间)

Redis中的下标从1开始,并且支持负数,如果是-1那就代表倒数第一个元素 = len - 1

getrange key start end

在这里插入图片描述
但是,由于中文一般是3个字节,那么在使用getrange后,切割的结果可能不是一个完整的汉字了
在这里插入图片描述

setrange

将字符串中的部分子串替换为别的内容,返回值是替换之后的字符串长度

setrange key offset value

其中的offset是从第几个字节开始替换,替换的长度就是value的长度
在这里插入图片描述
如果对一个不存在的key进行setrange,并不会报错,而是在偏移量之前添加空字节0x00
在这里插入图片描述

同样的,如果value是一段中文,那么setrange可能会出错

strlen

获取字符串的长度,单位是字节,如果value不是string类型,则报错,如果key不存在,返回0

strlen key

在这里插入图片描述

http://www.lryc.cn/news/123399.html

相关文章:

  • Android:换肤框架Android-Skin-Support
  • 软件测试面试心得:四种公司、四种问题…
  • 【探索SpringCloud】服务发现-Nacos使用
  • soap通信2
  • 【MySQL】MySQL不走索引的情况分析
  • JVM垃圾回收篇-垃圾回收算法
  • android APP内存优化
  • mysql_docker主从复制_实战_binlog混合模式_天座著
  • 鸿蒙开发学习笔记1——真机运行hello world
  • Java数组,简简单单信手沾来~
  • 认识SourceTree
  • python之列表推导式
  • selenium自动化测试之搭建测试环境
  • 模拟实现消息队列(以 RabbitMQ 为蓝本)
  • WordPress更换域名后-后台无法进入,网站模版错乱,css失效,网页中图片不显示。完整解决方案(含宝塔设置)
  • 无法正确识别车牌(Python、OpenCv、Tesseract)
  • VSCODE[配置ssh免密远程登录]
  • Multi-object navigation in real environments using hybrid policies 论文阅读
  • 初始多线程
  • 论坛项目day3|开发社区首页
  • Server - 文字转语音 (Text to Speech) 的在线服务 TTSMaker
  • Python学习笔记_基础篇_数据类型之字符串
  • (二分查找) 11. 旋转数组的最小数字 ——【Leetcode每日一题】
  • docker 制作tomcat镜像
  • 年之年的选择,组装版
  • 英语词法——代词
  • 1475.商品折扣后的最终价格
  • php、 go 语言怎么结合构建高性能高并发商城。
  • ubuntu 部署 ChatGLM-6B 完整流程 模型量化 Nvidia
  • 【数据分享】2001-2022年我国省市县镇四级的逐月最高气温数据(无需转发/Shp/Excel格式)