内容简介:本文章记录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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
GUI设计禁忌2.0
Jeff Johnson / 盛海艳 等 / 机械工业出版社 / 2008 / 49.00元
本书描述软件开发人员在设计图形用户界面(GUI)时经常犯的“禁忌”,并提出避免这些错误的基本原则和理论依据。本书将GUI禁忌分为7种类型:GUI控件禁忌、导航禁忌、文字禁忌、图形设计和布局禁忌、交互禁忌、响应性禁忌以及管理禁忌,并分别进行详述。 本书编排独特,条理清晰,针对性极强,是不可多得的GUI设计优秀资源。本书适合软件开发人员、web站点设计人员、开发经理、用户界面设计人员等阅读。一起来看看 《GUI设计禁忌2.0》 这本书的介绍吧!