Redis的数据结构的String ,list,hash的使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36411874/article/details/82257357

目录

五种数据类型

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使用场景

猜你喜欢

转载自blog.csdn.net/qq_36411874/article/details/82257357