内容简介:本文章记录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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
产品的视角:从热闹到门道
后显慧 / 机械工业出版社 / 2016-1-1 / 69.00
本书在创造性的提出互联网产品定义的基础上,为读者提供了一个从0基础到产品操盘手的产品思维培养方法! 全书以互联网产品定义为基础,提出了产品思维学习的RAC模型,通过认识产品、还原产品和创造产品三个阶段去培养产品思维和产品认知。 通过大量的图片和视觉引导的方法,作者像零基础的用户深入浅出的描绘了一条产品经理的自我修养路径,并且提供了知识地图(knowledge map)和阅读雷达等工具,......一起来看看 《产品的视角:从热闹到门道》 这本书的介绍吧!