当前位置: 首页 > 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.xdnf.cn/news/1247833.html

相关文章:

  • Python深度学习:从入门到进阶
  • ELK是什么
  • 分布式微服务--Nacos持久化
  • linux定时器管理 timer_*系统调用及示例
  • 每日五个pyecharts可视化图表-bars(4)
  • 系统设计入门:成为更优秀的工程师
  • iptables 里INPUT、OUTPUT、FORWARD 三个链(Chain)详解
  • MATLAB实现的机载合成孔径雷达回波生成和处理
  • zyh贪心类题目补题报告
  • 灰色优选模型及算法MATLAB代码
  • GoLand 项目从 0 到 1:第五天 —— 角色权限中间件实现与事务控制
  • 三极管三种基本放大电路:共射、共集、共基放大电路
  • 使用公众号的消息模板给关注用户发消息
  • Pycaita二次开发基础代码解析:参数化模板创建与设计表驱动建模
  • RHCA03--硬件监控及内核模块调优
  • MCP与Function Calling
  • SAP FI模块凭证增强逻辑的策略
  • C++ string类
  • NLP自然语言处理 02 RNN及其变体
  • GPS信号捕获尝试(上)
  • 基于 Ubuntu 的 Linux 系统中 Vivado 2020.1 下载安装教程
  • Modbus tcp 批量写线圈状态
  • 【STM32】HAL库中的实现(四):RTC (实时时钟)
  • ES 模块动态导入
  • BeanFactory 和 ApplicationContext 的区别?
  • centos通过DockerCompose搭建开源MediaCMS
  • 如何让 RAG 检索更高效?——大模型召回策略全解
  • 字符串匹配--KMP算法
  • Arxiv-Daily
  • 【机器学习】算法调参的两种方式:网格搜索(枚举)、随机搜索