文章目录
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、string类型
1. 常用命令
1.1 设置值
set key value [ex seconds] [px milliseconds] [nx|xx]
- ex seconds:为 键 设置 秒级过期时间。
- px milliseconds:为 键 设置 毫秒级过期时间。
- nx:键必须 不存在,才可以设置成功,用于 添加。
- xx:与 nx 相反,键必须 存在,才可以设置成功,用于 更新。
1.2 批量设置值
mset key value [key value ...]
1.3 批量获取值
mget key [key ...]
1.4 计数
incr 命令,Redis 还提供了 decr(自减)、incrby(自增指定数字)、decrby(自减指定数字)、incrbyfloat(自增浮点数)等命令操作。
1.5 追加值
append key value
1.6 字符串长度
strlen key
1.7 设置并返回原值
getset key value
1.8 设置指定位置的字符
setrange key offeset value
1.9 设置指定位置的字符
getrange key start end
二、string类型在Redis中是如何存储的
1. string类型存储
除了记录实际数据,String 类型还需要额外的内存空间记录数据长度、空间使用等信息,这些信息也叫作元数据。当实际保存的数据较小时,元数据的空间开销就显得比较大了。
一个 RedisObject 包含了 8 字节的元数据和一个 8 字节指针,这个指针再进一步指向具体数据类型的实际数据所在,例如指向 String 类型的 SDS 结构所在的内存地址:
- 为了节省内存空间,当保存的是 Long 类型整数时,RedisObject 中的指针就直接赋值为整数数据了,这样就不用额外的指针再指向整数了,节省了指针的空间开销。
- 当保存的是字符串数据,并且字符串小于等于 39 字节(3.2版本后SDS结构优化,该值变为44)时,RedisObject 中的元数据、指针和 SDS 是一块连续的内存区域,这样就可以避免内存碎片。这种布局方式也被称为 embstr 编码方式。
- 当字符串大于 39 字节时,SDS 的数据量就开始变多了,Redis 就不再把 SDS 和 RedisObject 布局在一起了,而是会给 SDS 分配独立的空间,并用指针指向 SDS 结构。这种布局方式被称为 raw 编码模式。
参考文档
Redis如何查看单个key所占用的内存大小
Redis:string类型带来的空间消耗过大的问题。
《闲扯Redis二》String数据类型之底层解析