深刻剖析Redis - Redis数据结构之字符串

Redis中key的特色json

Redis中的key是二进制安全的,意味着你可使用任何二进制序列做为一个key,从“foo”这样的字符串到JPEG文件的内容。空字符串也是一个有效的key(Redis keys are binary safe, this means that you can use any binary sequence as a key, from a string like "foo" to the content of a JPEG file. The empty string is also a valid key)。安全

key的其余规则:app

  • 特别长的key不是一个好主意。例如,一个1024字节的key不只在内存方面是一个坏主意,并且在数据集中查找key可能须要进行几回代价高昂的key的比较。即便如今的任务是匹配一个比较大的value是否存在,对它进行hash做为key是一个好主意,特别是从内存和带宽的角度来看。
  • 很是短的key经常也不是一个好主意。例如"u1000flw"比 "user:1000:followers"更短,可是,后者可读性更好。尽管短key明显消费更好的内存,你的工做是找到合适的平衡。
  • 尝试坚持一个模式。例如"object-type:id" 模式的例子:"user:1000"。
  • key最大不能超过521MB

前言

字符串类型是Redis中最简单的数据类型,Redis中值类型为字符串时,最大不能超过512MB。Redis的字符串类型是二进制安全的,除了普通字符串(整型,浮点型,json,xml),还能够存储图片、音视频。ui

经常使用命令

设置值

set key value [expiration EX seconds|PX milliseconds] [NX|XX]this

set命令的几个选项spa

  • EX seconds:为键设置秒级过时时间code

  • PX milliseconds:为键设置ms级过时时间视频

  • NX:仅当key不存在时,能够设置成功,用于新增xml

  • XX:仅当key存在时,能够设置成功,用于更新索引

NXXX参数示例:当key1不存在时,使用XX参数set key1失败,经过NX参数set key1成功,以后清空数据,再次使用NX参数,set key1成功

127.0.0.1:6379> flushall
OK
127.0.0.1:6379> set key1 value1 XX
(nil)
127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> set key1 value2 NX
(nil)
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> set key1 value2 NX
OK
复制代码

EX参数示例:设置key1过时时间为3s,以后经过ttl key1获取key1的过时时间剩余1s,1s以后,使用keys *获取全部的key

127.0.0.1:6379> set key1 value1 EX 3
OK
127.0.0.1:6379> ttl key1
(integer) 1
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> 

复制代码

批量设置值

mset key value [key value ...]

示例:

127.0.0.1:6379> mset a 1 b 2 c 3
OK
127.0.0.1:6379> keys *
1) "a"
2) "b"
3) "c"
复制代码

设置值及其过时时间

setex key seconds value

示例:

127.0.0.1:6379> setex key1 3 value1
OK
127.0.0.1:6379> ttl key1
(integer) 1
127.0.0.1:6379> keys *
(empty list or set)
复制代码

若是key 不存在,则设置值

setnx key value

示例:

127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> setnx key1 value2
(integer) 0
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> setnx key1 value2
(integer) 1
复制代码

获取值

示例:

get key

127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> get key1
"value1"
复制代码

批量获取值

mget key [key ...]

示例:

127.0.0.1:6379> mset a 1 b 2 c 3
OK
127.0.0.1:6379> mget a b c d
1) "1"
2) "2"
3) "3"
4) (nil)
复制代码

计数操做(原子命令)

自增操做

incr key

示例:当key不存在时,默认从0递增,操做成功,返回最新的值

127.0.0.1:6379> flushall
OK
127.0.0.1:6379> incr key1
(integer) 1
127.0.0.1:6379> incr key1
(integer) 2
127.0.0.1:6379> incr key1
(integer) 3
复制代码

incrby key increment

示例:当key不存在时,默认key的值为0,操做成功,返回最新的值

127.0.0.1:6379> flushall
OK
127.0.0.1:6379> incrby key1 3
(integer) 3
127.0.0.1:6379> incrby key1 3
(integer) 6
127.0.0.1:6379> incrby key1 4
(integer) 10
复制代码

自减操做

decr key

decrby key increment

浮点类型自增操做

incrbyfloat key increment

bit操做

BITOP operation destkey key [key ...]

operation 能够是 AND 、 OR 、 NOT 、 XOR 四种操做中的任意一种

BITOP AND destkey key [key ...] ,对一个或多个 key 求逻辑与,并将结果保存到 destkey

BITOP OR destkey key [key ...] ,对一个或多个 key 求逻辑或,并将结果保存到 destkey

BITOP XOR destkey key [key ...] ,对一个或多个 key 求逻辑异或,并将结果保存到 destkey

BITOP NOT destkey key ,对给定 key 求逻辑非,并将结果保存到 destkey

AND 示例:a的ascii码为97(0110 0001),b的ascii码为98(0110 0010),因此求与的结果是0110 0000,即ascii码为96的字符("`")

127.0.0.1:6379> mset key1 a key2 b
OK
127.0.0.1:6379> BITOP AND key1 key1 key2
(integer) 1
127.0.0.1:6379> get key1
"`"
复制代码

OR 示例:a|b=c

127.0.0.1:6379> mset key1 a key2 b
OK
127.0.0.1:6379> BITOP OR key1 key1 key2
(integer) 1
127.0.0.1:6379> get key1
"c"
复制代码

XOR 示例:a^b=\x03 异或的规则是相同等于0,不一样等于1,0110 0001^0110 0010=\x03

127.0.0.1:6379> mset key1 a key2 b
OK
127.0.0.1:6379> BITOP XOR key1 key1 key2
(integer) 1
127.0.0.1:6379> get key1
"\x03"
复制代码

NOT 示例:a按位取反,结果是\x9e

127.0.0.1:6379> set key1 a
OK
127.0.0.1:6379> BITOP NOT key1 key1
(integer) 1
127.0.0.1:6379> get key1
"\x9e"
复制代码

SETBIT操做

setbit key offset value

示例:将a的从左到右第6位设置为1,第7位设置为0,则a -> b

127.0.0.1:6379> set key1 a
OK
127.0.0.1:6379> setbit key1 6 1
(integer) 0
127.0.0.1:6379> setbit key1 7 0
(integer) 1
127.0.0.1:6379> get key1
"b"
复制代码

GETBIT操做

getbit key offset

示例:

127.0.0.1:6379> set key1 a
OK
127.0.0.1:6379> getbit key1 6
(integer) 0
127.0.0.1:6379> getbit key1 7
(integer) 1
复制代码

BITCOUNT操做

含义:计算给定字符串中,被设置为 1 的比特位的数量(索引的单位为byte)

bitcount key [start end]

示例:

127.0.0.1:6379>  set key1 ab
OK
127.0.0.1:6379> bitcount key1 0 1    #a和b中bit位为1的数量
(integer) 6
127.0.0.1:6379> bitcount key1 0 0    #a中bit位为1的数量
(integer) 3
127.0.0.1:6379> bitcount key1 0 -1   #end为-1表示查找到最后一个字节
(integer) 6
复制代码

不经常使用命令

追加命令

append key value

示例:

127.0.0.1:6379> set key1 a
OK
127.0.0.1:6379> append key1 2
(integer) 2
127.0.0.1:6379> get key1
"a2"
复制代码

字符串长度

strlen key

示例:

127.0.0.1:6379> set key1 abc
OK
127.0.0.1:6379> strlen key1 (integer) 3 复制代码

获取指定范围的字符

getrange key start end

示例:

127.0.0.1:6379> set key1 abcdefg
OK
127.0.0.1:6379> getrange key1 2 4
"cde"
复制代码

设置指定范围的字符

setrange key offset value

示例:

127.0.0.1:6379> setrange key1 2 123
(integer) 7
127.0.0.1:6379> get key1
"ab123fg"
复制代码

设置新值并返回旧值

getset key value

示例:

127.0.0.1:6379> set key1 abc
OK
127.0.0.1:6379> getset key1 123
"abc"
复制代码
相关文章
相关标签/搜索