1.String类型及操作
#:字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以 接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以 容纳的数据长度是512M。
2.基本命令:
(1):exists:判断字符串是否存在;
exist mykey
(2):append:O(1)
如果key以及存在了,append,命令将参数value数据追加到已存在的value的末尾,如果该key不存在,那么就会创建一个新的key/value。
127.0.0.1:6379> exists mykey
(integer) 0
127.0.0.1:6379> APPEND mykey 123
(integer) 3
(3):get key / set key / getset key:O(1)
get key 获取指定的key的value,如果与该key关联的value不是string类型,redis将返回错误信息,因为get命令只能用于获取string value;
127.0.0.1:6379> exists mykey
(integer) 0
127.0.0.1:6379> APPEND mykey 123
(integer) 3
127.0.0.1:6379> get mykey
"123"
set key 设定该key持有指定的字符串value,如果该key已经存在,则覆盖原有的值;
127.0.0.1:6379> exists mykey
(integer) 0
127.0.0.1:6379> APPEND mykey 123
(integer) 3
127.0.0.1:6379> get mykey
"123"
127.0.0.1:6379> set mykey abc
OK
127.0.0.1:6379> get mykey
"abc"
127.0.0.1:6379>
getset key:
先获取该key的值,再设定该key的值:只能处理string value,否则也会给出相关的错误
127.0.0.1:6379> getset mykey1 abc
"105"
127.0.0.1:6379> get mykey1
"abc"
127.0.0.1:6379> getset mykey
(error) ERR wrong number of arguments for 'getset' command
127.0.0.1:6379> get mykey
"abc"
127.0.0.1:6379>
(4):incr key / decr key / decrby key / incrby key : O(1)
incr key:
将指定的key的value递增+1,如果该value不存在,其初始值为0,在incr之后其值为1,如果value的值不能装换为整形值,如Hello,该操作将执行失败并返回相应的错误信息(64位有效值)
127.0.0.1:6379> get mykey
"abc"
127.0.0.1:6379> incr mykey
(error) ERR value is not an integer or out of range
127.0.0.1:6379> APPEND mykey1 0
(integer) 1
127.0.0.1:6379> incr mykey1
(integer) 1
127.0.0.1:6379> get mykey1
"1"
127.0.0.1:6379>
decr key : O(1)
将指定的key的value递减1,如果该key不存在,其初始值为0,在decr之后其值为-1,若不能转换为整形值,那么会包对应的错误。
127.0.0.1:6379> decr mykey1
(integer) 0
127.0.0.1:6379> get mykey1
"0"
127.0.0.1:6379> decr mykey
(error) ERR value is not an integer or out of range
127.0.0.1:6379> get mykey
"abc"
127.0.0.1:6379>
decrby key:
127.0.0.1:6379> INCRBY mykey1 10
(integer) 10
127.0.0.1:6379> get mykey1
"10"
127.0.0.1:6379>
incrby key:
127.0.0.1:6379> incrby mykey1 100
(integer) 105
127.0.0.1:6379> get mykey1
"105"
127.0.0.1:6379>
(5):strlen:O(1)
返回指定key的字符值长度,如果value不是string类型,redis将执行失败并给出相关错误信息;
127.0.0.1:6379> get mykey1
"abc"
127.0.0.1:6379> set mykey 1
OK
127.0.0.1:6379> get mykey
"1"
127.0.0.1:6379> STRLEN mykey
(integer) 1
127.0.0.1:6379> STRLEN mykey1
(integer) 3
127.0.0.1:6379>
(6):setex ttltime value / setnx / setrange / getrange:O(1)
setex key:
设置字符串存活时间以及字符串的值:
127.0.0.1:6379> SETEX mykey2 100 "Hello"
OK
127.0.0.1:6379> get mykey2
"Hello"
127.0.0.1:6379> TTL mykey2
(integer) 89
127.0.0.1:6379>
setnx key:O(1)
若key存在,那么不做任何操作并且返回key值,若不存在,相当于是set:
127.0.0.1:6379> setnx mykey1 "Hello"
(integer) 1
127.0.0.1:6379> setnx mykey1 "Woeld"
(integer) 0
127.0.0.1:6379> get mykey1
"Hello"
127.0.0.1:6379>
setrange key offset value:O(1)
替换指定Key的部分字符串值。从offset开始,替换的长度 为该命令第三个参 数value的字符串长度,其中如果 offset的值大于该Key的原有值Value的字符串长度,Redis将会在Value的后面补齐(offset - strlen(value))数量 的0x00,之后再追加新值。如果该键不存在,该命令会将 其原值的长度假设为0,并在其后添补offset个0x00后 再 追加新值。
127.0.0.1:6379> set key1 "Hello World"
OK
127.0.0.1:6379> get key1
"Hello World"
127.0.0.1:6379> getrange key1 0 4
"Hello"
127.0.0.1:6379> setrange key1 0 "Hi"
(integer) 11
127.0.0.1:6379> get key1
"Hillo World"
127.0.0.1:6379>
(7):mset / mget key1 key2 :O(1)
设置多个key的值,获取多个key的值:如果没有对应的key,则返回nil;
127.0.0.1:6379> mset k1 1 k2 2
OK
127.0.0.1:6379> mget k1 k2 k3
1) "1"
2) "2"
3) (nil)
127.0.0.1:6379>
(8):del key:删除key;
127.0.0.1:6379> mget k1 k2 k3
1) "1"
2) "2"
3) (nil)
127.0.0.1:6379> mget mykey mykey1
1) "1"
2) "Hello"
127.0.0.1:6379> del k1 k2 mykey mykey1
(integer) 4
127.0.0.1:6379> mget k1 k2 k3
1) (nil)
2) (nil)
3) (nil)
127.0.0.1:6379> mget mykey mykey1
1) (nil)
2) (nil)
127.0.0.1:6379>
3.hash类型
我们可以将Redis中的Hashes类型看成具有String Key和String Value的map容器。所以该类型非常适合 于存储值对象的信息。如Username、Password和Age等。如果Hash中包含很少的字段,那么 该类型 的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。简单来说就是键,字段,值!!!!!!
(1):hset / hget key1 value1 key2 value2 ... L指定字段以及字段值,也可删除字段:
127.0.0.1:6379> hset tom name lishutong age 30
(integer) 2
127.0.0.1:6379> hget tom name
"lishutong"
127.0.0.1:6379> hget tom age
"30"
127.0.0.1:6379> hdel tom name
(integer) 1
127.0.0.1:6379> hget tom name
(nil)
127.0.0.1:6379> hget tom age
"30"
127.0.0.1:6379>
(2):HEXISTS key:判断制定字段是否存在:
127.0.0.1:6379> hget tom name
(nil)
127.0.0.1:6379> hget tom age
"30"
127.0.0.1:6379> HEXISTS tom name
(integer) 0
127.0.0.1:6379> HEXISTS tom age
(integer) 1
127.0.0.1:6379>
(3):hlen key :统计字段key字段的数量:
127.0.0.1:6379> hget tom name
"li"
127.0.0.1:6379> hget tom age
"30"
127.0.0.1:6379> hget tom sex
"M"
127.0.0.1:6379> hlen tom
(integer) 3
127.0.0.1:6379>
(4):hmset / hmget key filed:获取设定指定字段的值:
127.0.0.1:6379> hmset tom name 'xian' age 60
OK
127.0.0.1:6379> hmget tom name age
1) "xian"
2) "60"
127.0.0.1:6379>
(5):hgetall:读取全部的键和值;
127.0.0.1:6379> hgetall tom
1) "age"
2) "60"
3) "name"
4) "xian"
5) "sex"
6) "M"
127.0.0.1:6379>
(6):hincrby key filyed increment: 无 hdecrby,只能给整数加减;
127.0.0.1:6379> HINCRBY tom age 5
(integer) 65
127.0.0.1:6379> hget tom age
"65"
127.0.0.1:6379> HINCRBY tom age 5
(integer) 70
127.0.0.1:6379> hget tom age
"70"
127.0.0.1:6379>
(7):hkeys / hvals : 键值对应:
127.0.0.1:6379> hkeys tom
1) "age"
2) "name"
3) "sex"
127.0.0.1:6379> HVALS tom
1) "70"
2) "xian"
3) "M"
127.0.0.1:6379>
(8):获取字段值长度:hstrlen key iflyed;
127.0.0.1:6379> HSTRLEN tom name
(integer) 4
127.0.0.1:6379> hget tom name
"xian"
127.0.0.1:6379>
4.list 类型
在Redis中,List类型是的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部 (right)添加新的 元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反, 如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。 List中可以包含的最大元素数量 是4294967295。从元素插入和删除的效率视角来看,如果我们是在链表的两头插入或删除元素,这将会是非常高效的操 作,即使链表中已经存储了百万条记录,该操作也可以在常量 时间内完成。然而需要说明的是,如果元 素插入或删除操作是作用于链表中间,那将会是非常低效的。相信对于有良好数据结构基础的开发者而言,这一点并不难理解。
(1):lpush key value:O(1):在指定的key的头部插入参数中给出的所有的values。如果该key存在,那么该命令将在插入之前创建一个与该key关联的空链表,之后再将数据从链表的头部插入,如果该键的value不是链表类型吗,该命令将返回相关的错误信息。lrange key start stop :返回链表的所有值。与数据结构链表同理。
127.0.0.1:6379> lpush k1 a b c d
(integer) 4
127.0.0.1:6379> lrange k1 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> lrange k2 0 -1
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379>
(2):lpushx key value:O(1):仅有当参数中指定的key存在时,该命令才会在其所关联的list value 的头部插入参数中给出的value,否则将不会有任何操作发生。
127.0.0.1:6379> lpush k1 e
(integer) 5
127.0.0.1:6379> lrange k1 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"
127.0.0.1:6379> lpush k2 e
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379>
(3):lpop key:返回并弹出指定key关联的链表中的第一个元素,即头部元素,如果key不存在,则返回nil,链表头部的元素。
127.0.0.1:6379> lrange k1 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"
127.0.0.1:6379> LPOP k1 1
1) "e"
127.0.0.1:6379> lrange k1 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> LPOP k1 1
1) "d"
127.0.0.1:6379> lrange k1 0 -1
1) "c"
2) "b"
3) "a"
127.0.0.1:6379>
(4):llen key :返回链表中的元素数量;
127.0.0.1:6379> lrange k1 0 -1
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> LLEN k1
(integer) 3
127.0.0.1:6379>
(5):lrem key count value : 如果count > 0,则从头开始删对应的value的数字,删除count个value,如果是count < 0,那么从尾部开始到头删除count个value,如果count = 0,那么删除所有的value。
127.0.0.1:6379> LRANGE k1 0 -1
1) "a"
2) "c"
3) "b"
4) "d"
5) "a"
6) "a"
7) "d"
8) "a"
9) "e"
10) "a"
11) "d"
12) "a"
13) "c"
14) "b"
15) "a"
127.0.0.1:6379> LREM k1 2 a
(integer) 2
127.0.0.1:6379> LRANGE k1 0 -1
1) "c"
2) "b"
3) "d"
4) "a"
5) "d"
6) "a"
7) "e"
8) "a"
9) "d"
10) "a"
11) "c"
12) "b"
13) "a"
127.0.0.1:6379> LREM k1 0 a
(integer) 5
127.0.0.1:6379> LRANGE k1
(error) ERR wrong number of arguments for 'lrange' command
127.0.0.1:6379> LRANGE k1 0 -1
1) "c"
2) "b"
3) "d"
4) "d"
5) "e"
6) "d"
7) "c"
8) "b"
127.0.0.1:6379> LREM k1 -3 d
(integer) 3
127.0.0.1:6379> LRANGE k1 0 -1
1) "c"
2) "b"
3) "e"
4) "c"
5) "b"
127.0.0.1:6379>
(6):lset key index value:替换对应的值为value的值,如果超出了范围,那么就返回相关的错误。
127.0.0.1:6379> LRANGE k1 0 -1
1) "c"
2) "a"
3) "e"
4) "c"
5) "b"
127.0.0.1:6379> LSET k1 0 a
OK
127.0.0.1:6379> LRANGE k1 0 -1
1) "a"
2) "a"
3) "e"
4) "c"
5) "b"
127.0.0.1:6379>
(7):lindex key index:返回对应index的值,为空则返回nil;
127.0.0.1:6379> LRANGE k1 0 -1
1) "a"
2) "a"
3) "e"
4) "c"
5) "b"
127.0.0.1:6379> LINDEX k1 1
"a"
127.0.0.1:6379> LINDEX k1 2
"e"
127.0.0.1:6379>
(8):ltrim key start stop :修建存在得到链表到指定的范围内;
127.0.0.1:6379> LRANGE k1 0 -1
1) "a"
2) "a"
3) "e"
4) "c"
5) "b"
127.0.0.1:6379> LTRIM k1 0 2
OK
127.0.0.1:6379> LRANGE k1 0 -1
1) "a"
2) "a"
3) "e"
127.0.0.1:6379>
(9):linsert key before | after pivot value:在链表中的value前插入(before),在链表中的value后插入对应的值。