目录
五种数据类型
key定义注意
存储String
常用命令:
存储Hash
存储list
五种数据类型
字符串(String)、字符串列表(list)、有序字符串集合(sorted set)、哈希(hash)、字符串集合(set)
key定义注意
1,不要过长,不能超过1024个字节,查找速度有所影响。
2,不能过短,降低可读性。
3,统一的命名规范。
存储String
以二进制进行操作,存入和获取数据相同。value可以容纳512M。
常用命令:
赋值与取值:
127.0.0.1:6379> set name "hi,create a world"
OK
127.0.0.1:6379> get name
"hi,create a world"
取值为空:
127.0.0.1:6379> get imooc
(nil)
getset命令:
先取出来,再赋值。
127.0.0.1:6379> getset name baidu
"hi,create a world"
127.0.0.1:6379> get name
"baidu"
删除:
127.0.0.1:6379> set person jack
OK
127.0.0.1:6379> get person
"jack"
127.0.0.1:6379> del person
(integer) 1
127.0.0.1:6379> get person
(nil)
数值增减,将制定key的value递增,如果不存在,设置初始值为0,再增加。
如果是字符创,则报错抛出异常。
127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> get num
"1"
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> get num
"2"
127.0.0.1:6379> incr imooc
(error) ERR value is not an integer or out of range
数值递减,将制定key的value递减,如果不存在,设置初始值为0,再递减。
127.0.0.1:6379> decr num
(integer) 1
127.0.0.1:6379> get num
"1"
127.0.0.1:6379> get num2
(nil)
127.0.0.1:6379> decr num2
(integer) -1
扩展命令
将制定的命令增加几,加其他数值。
127.0.0.1:6379> incrby num 6
(integer) 7
127.0.0.1:6379> get num
"7"
127.0.0.1:6379> incrby num3 5
(integer) 5
127.0.0.1:6379> decrby num 4
(integer) 3
将指定的相减。
拼凑字符创,如果原有的则追加,没有则创建。
127.0.0.1:6379> append num 5
(integer) 2
127.0.0.1:6379> get num
"35"
127.0.0.1:6379> append num5 123
(integer) 3
127.0.0.1:6379> get num5
"123"
127.0.0.1:6379> incr num
(integer) 36
127.0.0.1:6379> get num
"36"
存储Hash
是String key和String value的map的容器。(用户名,密码等),每个hash可以存储4294967295个键值对。
赋值:hset,hmset存多个键值对
127.0.0.1:6379> hset myhash username jack
(integer) 1
127.0.0.1:6379> hset myhash age 22
(integer) 1
127.0.0.1:6379> hmset myhash2 username huang age 22
OK
取值:hget,hmget,hgetall(所有键值都取出来)
127.0.0.1:6379> hget myhash username
"jack"
127.0.0.1:6379> hget myhash age
"22"
127.0.0.1:6379> hmget myhash2
(error) ERR wrong number of arguments for 'hmget' command
127.0.0.1:6379> hmget myhash2 username age
1) "huang"
2) "22"
127.0.0.1:6379> hgetall myhash
1) "username"
2) "jack"
3) "age"
4) "22"
删除一个或者多个,一个:hdel,多个:del整个集合。
127.0.0.1:6379> hdel myhash2 username age
(integer) 0
127.0.0.1:6379> hset myhash2 username huang age 22
(integer) 2
127.0.0.1:6379> del myhash2
(integer) 1
127.0.0.1:6379> hget myhash2 username age
(error) ERR wrong number of arguments for 'hget' command
127.0.0.1:6379> hget myhash2 username
(nil)
增加数字
127.0.0.1:6379> hget myhash age
"22"
127.0.0.1:6379> hincrby myhash age 6
(integer) 28
127.0.0.1:6379> hget myhash age
"28"
自学命令
127.0.0.1:6379> hexists myhash username
(integer) 1
127.0.0.1:6379> hexists myhash password
(integer) 0
127.0.0.1:6379> hgetall myhash
1) "username"
2) "jack"
3) "age"
4) "28"
127.0.0.1:6379> hlen myhash
(integer) 2
127.0.0.1:6379> hkeys myhsh
(empty list or set)
127.0.0.1:6379> hkeys myhash
1) "username"
2) "age"
127.0.0.1:6379> hvals myhash
1) "jack"
2) "28"
存储list
按照插入顺序排序的列表,可以在头部和尾部添加。如果该键不存在则会存储新的列表,如果已经移除则也会删除。如果在列表两头删除或者添加是十分高效。如果元素插入删除操作在链表中间,效率会比较低。
ArrayList数组方式存储数据,根据索引查询数据十分快,新增和删除比较慢,涉及位移。
LinkList使用双向链表,增加和删除数据。
两端添加 lpush mylist a b c,a先进去,在后边。c在左侧。
127.0.0.1:6379> lpush mylist a b c
(integer) 3
127.0.0.1:6379> lpush mylist 1 2 3
(integer) 6
右侧插入:rpush mylist2 a b c,
127.0.0.1:6379> rpush mylist2 a b c
(integer) 3
127.0.0.1:6379> rpush mylist2 1 2 3
(integer) 6
查看列表( lrange mylist start stop ,可以从0,也可以从-1则是尾部,-2倒数类推)
127.0.0.1:6379> lrange mylist 0 5
1) "3"
2) "2"
3) "1"
4) "c"
5) "b"
6) "a"
127.0.0.1:6379> lrange mylist2 0 -1
1) "a"
2) "b"
3) "c"
4) "1"
5) "2"
6) "3"
127.0.0.1:6379> lrange mylist2 0 -2
1) "a"
2) "b"
3) "c"
4) "1"
5) "2"
两端弹出:
127.0.0.1:6379> lpop mylist
"3"
127.0.0.1:6379> lrange mylist 0 -1
1) "2"
2) "1"
3) "c"
4) "b"
5) "a"
127.0.0.1:6379> rpop mylist
"a"
127.0.0.1:6379> lrange mylist 0 -1
1) "2"
2) "1"
3) "c"
4) "b"
获取列表元素个数
127.0.0.1:6379> llen mylist
(integer) 4
127.0.0.1:6379> llen mylist2
(integer) 6
127.0.0.1:6379> llen mylist3
(integer) 0
扩展命令
lpushx:仅当命令存在的时候,插入到头部。
127.0.0.1:6379> lpushx mylist x
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1
1) "x"
2) "2"
3) "1"
4) "c"
5) "b"
127.0.0.1:6379> lpushx mylist33 x
(integer) 0
rpushx,相反,插入尾部.
127.0.0.1:6379> rpushx mylist y
(integer) 6
127.0.0.1:6379> lrange mylist 0 -1
1) "x"
2) "2"
3) "1"
4) "c"
5) "b"
6) "y"
lrem :lremove的缩写,写上具体的list,从头到尾遍历,删除count个为value的元素。
eg:lrem,从头删除2个3。lrem mylist3 2 3
从尾部往上删除。lrem mylist3 -2 2(从后边开始数起删除2个2)
127.0.0.1:6379> lrange mylist3 0 -1
1) "3"
2) "2"
3) "1"
4) "3"
5) "2"
6) "1"
7) "3"
8) "2"
9) "1"
127.0.0.1:6379> lrem mylist3 2 3
(integer) 2
127.0.0.1:6379> lrange mylist3 0 -1
1) "2"
2) "1"
3) "2"
4) "1"
5) "3"
6) "2"
7) "1"
127.0.0.1:6379> lrange mylist3 -2 2
(empty list or set)
127.0.0.1:6379> lrem mylist3 -2 2
(integer) 2
127.0.0.1:6379> lrange mylist3 0 -1
1) "2"
2) "1"
3) "1"
4) "3"
5) "1"
lrem mylist3 0 2:删除里面所有的2.
127.0.0.1:6379> lrange mylist3 0 -1
1) "2"
2) "1"
3) "1"
4) "3"
5) "1"
127.0.0.1:6379> lrem mylist3 0 2
(integer) 1
127.0.0.1:6379> lrange mylist3 0 -1
1) "1"
2) "1"
3) "3"
4) "1"
给某个位置添加指定的元素:lset mylist 3 mm
127.0.0.1:6379> lset mylist 3 mm
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "x"
2) "2"
3) "1"
4) "mm"
5) "b"
6) "y"
在某个元素前或者后插入某个元素。
在第一个B之前插入,linsert mylist4 before b 11。
第一个B之后插入:linsert mylist4 after b 11。
127.0.0.1:6379> lrange mylist4 0 -1
1) "c"
2) "b"
3) "a"
4) "c"
5) "b"
6) "a"
7) "c"
8) "b"
9) "a"
127.0.0.1:6379> linsert mylist4 before b 11
(integer) 10
127.0.0.1:6379> lrange mylist4 0 -1
1) "c"
2) "11"
3) "b"
4) "a"
5) "c"
6) "b"
7) "a"
8) "c"
9) "b"
10) "a"
127.0.0.1:6379> linsert mylist4 after b 11
(integer) 11
127.0.0.1:6379> lrange mylist4 0 -1
1) "c"
2) "11"
3) "b"
4) "11"
5) "a"
6) "c"
7) "b"
8) "a"
9) "c"
10) "b"
11) "a"
mylist3右边弹出,压入到mylist4左边,
127.0.0.1:6379> lrange mylist4 0 -1
1) "c"
2) "11"
3) "b"
4) "11"
5) "a"
6) "c"
7) "b"
8) "a"
9) "c"
10) "b"
11) "a"
127.0.0.1:6379> lrange mylist4 0 -1
1) "c"
2) "11"
3) "b"
4) "11"
5) "a"
6) "c"
7) "b"
8) "a"
9) "c"
10) "b"
11) "a"
127.0.0.1:6379> lrange mylist3 0 -1
1) "1"
2) "1"
3) "3"
4) "1"
127.0.0.1:6379> rpoplpush mylist3 mylist4
"1"
127.0.0.1:6379> lrange mylist3 0 -1
1) "1"
2) "1"
3) "3"
127.0.0.1:6379> lrange mylist4 0 -1
1) "1"
2) "c"
3) "11"
4) "b"
5) "11"
6) "a"
7) "c"
8) "b"
9) "a"
10) "c"
11) "b"
12) "a"
repoplpush使用场景