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

Redis类型之String

1.Redis中的string

        注意本文以及之后讲的redis的类型但是指的value的类型,所有的key都是string

        Redis中的字符串,直接就是按照二进制数据的方式存储的,不会做任何的编码转换,这里相对于mysql就比较好(个人感觉),因为mysql默认的字符集是拉丁文插入中文会失败。

        string不仅可以存储文本数据还可以存储整数、普通文本字符串、JSON、xml、二进制数据,这里值得一提的是redis对于string的类型限制了大小最大为512M,这是因为redis是单线程其希望进行的操作都比较快速。

2.String常用操作

2.1 SET

SET key value [expiration EX seconds | PX milliseconds] [NX | XX]

       redis文档给出的语法格式说明:[]相当于一个独立的单元,表示可选项(可有可无),|表示或者的意思,[]和[]之间可以同时存在

        对于第一个中括号其指的是设不设置过期时间,EX表示设置的时间单位是s而PX表示设置的时间的单位是ms。

        对于第二个括号中的NX表示如果key不存在才设置,如果key存在则不设置(返回nil),而XX表示key存在才设置(相当于更新key中的value),如果key不存在则返回nil        

2.2 失去年终奖小技巧

        清除redis上所有的数据的操作,这就等价于删库了(drop database)

FLUSHALL                  //轻易不要使用,不然废了,但是学习中可以随便用

2.3 GET

GET key   //这个命令还是比较简单的

·        对于GET来说,只是支持字符串类型的value,如果value是其他类型,使用GET获取就会报错,下面我对list类型的value使用get就出现了报错

2.4 MGET 以及 MSET

MGET key [key ...]
MSET key value [key value ...]

        对比于上面的set和get其实mset和mget的区别在于一次操作多组键值对。

        对于多组key和value其实mset和mget是高效的,这是因为我们的这些命令其实是需要通过网络来发送给redis的服务端的,那么相对于多次发送的set和get显然是一次发送多组数据的mset和mget更高效

        

        但是一次设置太多的数据依旧可能会导致redis阻塞。

2.5 String中存储的是数字时可以使用的操作

2.5.1 value是整数

        incr:针对value+1

        incrby:针对value+n

        decr:针对value-1

        decrby:针对value-n

        这四个操作的返回值都是相应操作后的值,值得一提的是上面的操作如果key不存在会将key视为0创建并进行操作。

        其实incrby也可以用来实现减法,这就好比加上一个负数。同样的decrby也可以用来实现加法

2.5.2 value是浮点数

        incrbyfloat:把key对应的value进行+-运算,运算的操作数可以是浮点数,但是并没有提供decrbyfloat这样的命令,就只能同加上负数来实现减法

        这里猜测为什么没有提供减法版本,可能是因为使用redis进行的计数操作一般都是针对整数进行的。

        这里因为是多个客户端对接一个服务端那么上面的这些对数字操作的命令会不会存在线程安全的问题呢?就比如在c++中我们起了两个线程对同一个变量都进行++10000次但是结果并不是20000一般结果都是比20000小的。但是其实是没有问题的这是因为redis是一个单线程。

2.6 字符串操作

2.6.1 获取字符串的长度

APPEND KEY VALUE

        append返回值的长度单位是字节,这是因为redis的字符串并不会对字符编码做任何处理,换而言之就是redis只认识字节不认识字符。

        append可以用来设置key,如果key已经存在那么append会将value追加到key原来的value中

2.6.2 从某个位置开始替换字符串

SETRANGE key offset value

        offset表示从哪个位置开始,value表示替换的字符串。

2.6.3 截取字符串

GETRANDGE key start end

        这个区间是左闭右闭的,这里确实需要注意,因为C++中的区间是左闭右开的,并且这里的下标是支持负数的对应关系如下,简单来说负数就是len-1位置处的元素

3.string内部的三种编码格式

        int:64位/8字节的整数

        embstr:压缩字符串。适用于比较短的字符串

        raw:普通字符串。适用于表示更长的字符串。

object encoding  可以查看value的编码格式

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

相关文章:

  • 【npm 解决】---- TypeError: crypto.hash is not a function
  • GPS信号捕获尝试
  • 【机器学习深度学习】模型剪枝
  • Python包安全工程实践:构建安全可靠的Python生态系统
  • 【学习笔记】NTP时间同步验证
  • 期权定价全解析:从Black-Scholes到量子革命的金融基石
  • Linux 逻辑卷管理:LVM 原理与 Stratis、VDO 特性对比
  • 基于 Spring Boot 的小区人脸识别与出入记录管理系统实现
  • 力扣经典算法篇-43-全排列(经典回溯问题)
  • css3属性总结和浏览器私有属性
  • Python、Java、C#实现浮点型转换为转型
  • Mysql使用Canal服务同步数据->ElasticSearch
  • 电子秤利用Websocket做为Client向MES系统推送数据
  • 文件编译、调试及库制作
  • 跑yolov5的train.py时,ImportError: Failed to initialize: Bad git executable.
  • 前端实现Excel文件的在线预览效果
  • 【机器学习】算法调参的两种方式:网格搜索(枚举)、随机搜索
  • 【力扣 Hot100】 刷题日记
  • Python分块读取大型Excel文件
  • 豆包新模型与 PromptPilot 实操体验测评,AI 辅助创作的新范式探索
  • LangGraph学习笔记 — LangGraph中State状态模式
  • 自动驾驶控制算法——MPC控制算法
  • qq scheme
  • GaussDB 并行创建索引
  • 使用iptables的nat链表进行端口转发
  • 基于MATLAB实现的频域模态参数识别方法
  • 算法3. 无重复字符的最长子串
  • Django中的转发与重定向详解
  • Boosting 知识点整理:机制、对比与应用场景
  • 统计鱼儿分布情况 Java