内容简介:本文章记录Redis中String数据类型的笔记PS:value最多存512MB上限,Redis字符串类型用于场景这里举几个栗子,缓存,计数器(播放量和浏览量等),分布式锁等等。String类型的内部编码有三个分别是
本文章记录 Redis 中String数据类型的笔记
- 结构
- 内部编码
- 命令和栗子
结构
key | value |
---|---|
hello | world(字符串) |
counter | 1(整型Redis这里会字符串类型转换) |
bits | 10111101(二进制在位图有用到) |
data | JSON数据" " |
PS:value最多存512MB上限,Redis字符串类型用于场景这里举几个栗子,缓存,计数器(播放量和浏览量等),分布式锁等等。
内部编码
String类型的内部编码有三个分别是 int
, raw
, embstr
,下面介绍一下它们:
-
int编码
:保存
long
型的64位有符号整数 - raw编码 :保存长度小于44字节的字符串
- embstr编码 :保存长度大于44字节的字符串
可以利用 object encoding key
进行查看String类型的key是用的那些内部编码
127.0.0.1:6379> object encoding str "raw" 127.0.0.1:6379> set str 123456789123456789 OK 127.0.0.1:6379> object encoding str "int" 127.0.0.1:6379> set str 1234567891234567899999 OK 127.0.0.1:6379> object encoding str "embstr"
命令和栗子
get,set,del
API命令 | 详解 | 时间复杂度 |
---|---|---|
get key | 获取指定 key 的对应的value | O(1) |
set key value | 设置 key - value | O(1) |
del key | 删除 key - value | O(1) |
127.0.0.1:6379> get aquan "aquan" 127.0.0.1:6379> set name "aquan" OK 127.0.0.1:6379> get name "aquan" 127.0.0.1:6379> del name (integer) 1 127.0.0.1:6379> get name (nil)
incr, decr,incrby,decrby
API命令 | 详解 | 时间复杂度 |
---|---|---|
incr key | key自增1,如果不存在key,自增后get key = 1 | O(1) |
decr key | key自减1,如果不存在key,自减后get key = -1 | O(1) |
incrby key num | key自减num,如果不存在key,自减后get key = num | O(1) |
decrby key count | key自减num,如果不存在key,自增后get key = -num | O(1) |
127.0.0.1:6379> get count (nil) 127.0.0.1:6379> incr count (integer) 1 127.0.0.1:6379> get count "1" 127.0.0.1:6379> incrby count 99 (integer) 100 127.0.0.1:6379> decr count (integer) 99 127.0.0.1:6379> get coutn (nil)
set,setnx,set xx
API命令 | 详解 | 时间复杂度 |
---|---|---|
set key value | 不管 key 是否存在,都设置 | O(1) |
setnx key value | key不存在,才设置(add) | O(1) |
set key value xx | key存在,才设置(updata) | O(1) |
PS: setnx
可以理解为数据的ADD操作, set xx
理解为更新操作
127.0.0.1:6379> exists name (integer) 0 127.0.0.1:6379> set name "aquan" OK 127.0.0.1:6379> setnx name "666" (integer) 0 127.0.0.1:6379> get name "aquan" 127.0.0.1:6379> set name "nb" xx OK 127.0.0.1:6379> get name "nb" 127.0.0.1:6379> exists java (integer) 0 127.0.0.1:6379> setnx java "nb" (integer) 1 127.0.0.1:6379> get java "nb"
mget,mset
API命令 | 详解 | 时间复杂度 |
---|---|---|
mget key1 key2 key3 ... | 批量获取key | O(n) |
mset key1 value1 key2 value2 .. | 批量设置key - value | O(n) |
127.0.0.1:6379> mset key1 value1 key2 value2 key3 value3 OK 127.0.0.1:6379> mget key1 key2 key3 1) "value1" 2) "value2" 3) "value3"
PS:在适量的情况下 mget
比多次使用单个 get
获取key值效率高,速度快
getset,append,strlen
API命令 | 详解 | 时间复杂度 |
---|---|---|
getset key value | set key newvalue并且返回旧的value | O(1) |
append key value | 将value追加到旧的value | O(1) |
strlen key | 返回字符串的长度 | O(1) |
PS:注意中文使用 strlen
的时候,一个中文的长度为2
127.0.0.1:6379> getset name "aquan" "nb" 127.0.0.1:6379> append name "666" (integer) 8 127.0.0.1:6379> get name "aquan666" 127.0.0.1:6379> strlen name (integer) 8
incrbyfloat,getrange,setrange
API命令 | 详解 | 时间复杂度 |
---|---|---|
incrbyfloat key 2.8 | 增加对应key的值2.8 | O(1) |
getrange key start end | 获取字符串指定下标所有的值 | O(1) |
setrange key index value | 设置指定下标所有对应的值 | O(1) |
127.0.0.1:6379> incr count (integer) 100 127.0.0.1:6379> incrbyfloat count 2.8 "102.8" 127.0.0.1:6379> get count "102.8" 127.0.0.1:6379> set str abcdef OK 127.0.0.1:6379> getrange str 0 2 "abc" 127.0.0.1:6379> setrange str 2 "zzz" (integer) 6 127.0.0.1:6379> get str "abzzzf"
以上所述就是小编给大家介绍的《Redis-String》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Windows 程序设计:第5版
CharlesPetzold / 北京博彦科技发展有限公司 / 北京大学出版社 / 2003-11-1 / 160.00元
Windows程序设计(第5版)对于Windows程序员来说,“从 Charles 的(Windows程序设计)一书中寻找答案。”几乎成了一句至理名言。而(Windows程序设计》第5版是专门为在Microsoft Windows 98、Microsoft Windows NT 4和 Windows NT 5下编程的开发人员编写的。内容博大精深,并有大量的源代码来帮助读者掌握Windows编程。本......一起来看看 《Windows 程序设计:第5版》 这本书的介绍吧!
JSON 在线解析
在线 JSON 格式化工具
HEX CMYK 转换工具
HEX CMYK 互转工具