当前位置: 首页 > 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.dtcms.com/a/316877.html

相关文章:

  • linux-单用户模式、营救模式
  • 高阶 RAG :技术体系串联与实际落地指南​
  • RHCA03--硬件监控及内核模块调优
  • 【Spring Cloud】-- RestTeplate实现远程调用
  • Java开发时出现的问题---并发与资源管理深层问题
  • 嵌入式开发学习———Linux环境下IO进程线程学习(四)
  • 《嵌入式数据结构笔记(三):数据结构基础与双向链表》
  • 应急响应排查思路
  • MLIR Bufferization
  • JWT 签名验证失败:Java 与 PHP 互操作问题解决方案
  • OpenHarmony 5.0 Settings中wifi删除密码立刻去输入密码连接,连接不上
  • 性能测试终极指南:从指标到实战
  • 自动驾驶中的传感器技术24——Camera(15)
  • Mybatis的应用及部分特性
  • 机器学习——集成学习(Ensemble Learning):随机森林(Random Forest),AdaBoost、Gradient Boosting,Stacking
  • 企业级Redis Cluster部署详解及演练
  • 森赛睿科技成为机器视觉产业联盟会员单位
  • 解决cv::dilate处理后的图像边缘像素出现异常值的问题
  • 结构化设计工具与技术详解
  • Spring 的优势
  • 内部排序算法总结(考研向)
  • 从递归到动态规划-解码方法Ⅱ
  • 软件测试面试如何避坑呢?
  • 8.5 各种攻击实验
  • 使用 BAML 模糊解析改进 LangChain 知识图谱提取:成功率从25%提升到99%
  • 无人机陀螺仪模块技术解析
  • SQL的LEFT JOIN优化
  • 【C语言】动态内存管理详解
  • Centos7 、9 、OpenEuler 22、24对比
  • TCP协议与UDP协议