Redis基础与数据结构常用命令

Redis库的操作

  • set key value

插入键值对

127.0.0.1:6379[2]> set name ls
OK
  • get key

返回指定key的value

127.0.0.1:6379[2]> get name
"ls"
  • select index

redis中的数据库总共有16个,下标为0-15,index表示下标

127.0.0.1:6379> select 2
OK
127.0.0.1:6379[2]> 
  • keys * .

查看当前库中所有的key

127.0.0.1:6379> keys *
 1) "myset"
 2) "mysort"
 3) "list1"
 4) "age"
 5) "myset2"
 6) "mylist"
  • dbsize

返回仓库中key的数目

127.0.0.1:6379[1]> dbsize
(integer) 1
  • move key 1

将指定key移动到1号仓库

127.0.0.1:6379[2]> keys *
1) "sex"
2) "name"
127.0.0.1:6379[2]> move sex 1
(integer) 1
127.0.0.1:6379[2]> keys *
1) "name"
127.0.0.1:6379[2]> select 1
OK
127.0.0.1:6379[1]> keys *
1) "sex"
  • exists myset

检查key为myset的是否存在,如果存在返回1,如果不存在返回0

127.0.0.1:6379> exists myset
(integer) 1
  • del key1 key2 key3 …

删除key,可以多个可以一个

127.0.0.1:6379[2]> keys *
1) "gender"
2) "name"
3) "age"
127.0.0.1:6379[2]> del name age
(integer) 2
127.0.0.1:6379[2]> keys *
1) "gender"
  • rename gender sex

将key为gender重命名为sex

127.0.0.1:6379[2]> keys *
1) "gender"
127.0.0.1:6379[2]> rename gender sex
OK
127.0.0.1:6379[2]> keys *
1) "sex"
  • expire sex 1000

将key的过期时间设置为1000秒

127.0.0.1:6379[2]> expire sex 1000
(integer) 1
  • ttl sex

查看sex的到期时间

127.0.0.1:6379[2]> ttl sex
(integer) 953
  • type sex

返回指定key(sex)的value的数据类型

127.0.0.1:6379[2]> type sex
string
  • flushdb

删除当前数据库中所有的key

  • flushall

删除所有数据库中所有的key

  • info

返回服务器的信息和统计

  • echo value

打印value,相当于:System.out.println(value);

频道订阅

  • subscribe channel

订阅频道 ,订阅channel这个频道

127.0.0.1:6379> subscribe laoma
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "laoma"
3) (integer) 1
  • psubscribe ch*

批量订阅以ch开头的频道

127.0.0.1:6379> psubscribe ch*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "ch*"
3) (integer) 1
  • publish channel content

在指定的频道中发布信息

127.0.0.1:6379[1]> publish laoma good
(integer) 2

存储String常用命令

1.赋值取值

  • 赋值 set key value
  • 取值 get key
127.0.0.1:6379> set country china
OK
127.0.0.1:6379> get country
"china"

2.删除

  • del key
127.0.0.1:6379> get message   //得到key为message的value为playGame
"playGame"
127.0.0.1:6379> del message    //执行删除操作
(integer) 1
127.0.0.1:6379> get message  //再次get 没有得到,说明删除
(nil)
127.0.0.1:6379> 

3.数值操作

  • 数值递增 incr key

将指定key的value递增1,如果key不存在,则默认value的值为0.

127.0.0.1:6379> set count 90  //给count赋值为 90 
OK
127.0.0.1:6379> incr count  //第一次递增
(integer) 91
127.0.0.1:6379> incr count  第二次递增
(integer) 92
127.0.0.1:6379> get count  //得到两次递增之后的值为 92
"92"
127.0.0.1:6379> get age  //取key为age的value不存在
(nil)
127.0.0.1:6379> incr age  //将age递增一次
(integer) 1
127.0.0.1:6379> get age    //由于不存在key的value默认为0,所有得到age一次递增之后为1
"1"
  • 数值递减 decr key

将指定的key的value递减1,如果key不存在,则默认value的值为0

127.0.0.1:6379> get count  //count的初始值为92
"92"
127.0.0.1:6379> decr count
(integer) 91
127.0.0.1:6379> decr count
(integer) 90
127.0.0.1:6379> get count  //经过两次递减之后的值为90
"90"
127.0.0.1:6379> decr age1  //由于age1 这个key不存在,默认value为0开始递减
(integer) -1
127.0.0.1:6379> get age1  //递减后的值为-1
"-1"
  • 数值加法 incrby key num

将指定key的value增加num,如果key不存在,则默认value为0,再增加num。

127.0.0.1:6379> get count   //count的初始值为90
"90"
127.0.0.1:6379> incrby count 10
(integer) 100
127.0.0.1:6379> get count  //经过增加10之后,得到的值为100
"100"
127.0.0.1:6379> get count1  //count1 不存在
(nil)
127.0.0.1:6379> incrby count1 10  //给count1的value增加10
(integer) 10
127.0.0.1:6379> get count1   //得到增加之后的值为10
"10"
  • 数值减法 decrby key num

将指定key 的value减掉num,如果key不存在,则默认value为0。

127.0.0.1:6379> get count  
"100"
127.0.0.1:6379> decrby count 10   
(integer) 90
127.0.0.1:6379> get count   
"90"
127.0.0.1:6379> get count2
(nil)
127.0.0.1:6379> decrby count2 10
(integer) -10
127.0.0.1:6379> get count2
"-10"

4.字符串追加

  • append key vul

将指定key的value后面追加vul,这不是数值的加减,是字符串后面的追加。

127.0.0.1:6379> get country
"china"
127.0.0.1:6379> append country Good!
(integer) 10
127.0.0.1:6379> get country
"chinaGood!"

5.扩展命令

  • getset key value

先获取key再进行赋值

127.0.0.1:6379> get country
"chinaGood!"
127.0.0.1:6379> getset country china  //先得到country的值在对它赋值为china
"chinaGood!"
127.0.0.1:6379> get country
"china"

存储Hash常用命令

1.存储

  • hset ishash key1 value1 key2 value2 key3 value3 …

将key value键值对存储到myhash中,可以一次存入多个键值对。

127.0.0.1:6379> hset ishash name xiaoming age 10 address beijing
(integer) 3

2.取值

  • hget ishash key

获得ishash中key的value。

127.0.0.1:6379> hget ishash name
"xiaoming"
  • hmget ishash key1 key2 key3 …

获得ishash中多个key的value。

127.0.0.1:6379> hmget ishash name age address
1) "xiaoming"
2) "10"
3) "beijing"
  • hgetall ishash

获得ishash中全部的key跟value。

127.0.0.1:6379> hgetall ishash
1) "name"
2) "xiaoming"
3) "age"
4) "10"
5) "address"
6) "beijing"

3. 删除

  • hdel ishash key1 key2 key3 …

删除ishash中指定的key,key可以为一个,也可以为多个。

127.0.0.1:6379> hgetall ishash
 1) "name"
 2) "xiaoming"
 3) "age"
 4) "10"
 5) "address"
 6) "beijing"
 7) "number"
 8) "10"
 9) "num"
10) "20"
11) "age1"
12) "20"
13) "age2"
14) "90"
15) "age3"
16) "89"
127.0.0.1:6379> hdel ishash age1 age2 
(integer) 2
127.0.0.1:6379> hgetall ishash   //删除ishash中的age1 跟 age2之后得到的结果
 1) "name"
 2) "xiaoming"
 3) "age"
 4) "10"
 5) "address"
 6) "beijing"
 7) "number"
 8) "10"
 9) "num"
10) "20"
11) "age3"
12) "89"
  • del myhash

删除myhash以及其中的key跟value。

127.0.0.1:6379> hgetall myhash
1) "name"
2) "laoma"
3) "age"
4) "20"
del myhash
(integer) 1
127.0.0.1:6379> hgetall myhash
(empty list or set)

4.增加

  • hincrby ishash key num

将ishash中指定key的value增加num

127.0.0.1:6379> hget ishash age
"10"
127.0.0.1:6379> hincrby ishash age 2
(integer) 12
127.0.0.1:6379> hget ishash age
"12"

5.检查key是否存在

  • hexists ishash key

检查ishash中的key是否存在,如果存在返回1,如果不存在返回0

127.0.0.1:6379> hexists ishash name
(integer) 1
127.0.0.1:6379> hexists ishash name1
(integer) 0

6.hash中key的数量

  • hlen ishash

返回ishash中key-value的个数

127.0.0.1:6379> hlen ishash
(integer) 6

7.得到hash中所有的key或者value

  • hkeys ishash

返回ishash中所有的key

127.0.0.1:6379> hkeys ishash
1) "name"
2) "age"
3) "address"
4) "number"
5) "num"
6) "age3"
  • hvals ishash

返回ishash中所有的value

127.0.0.1:6379> hvals ishash
1) "xiaoming"
2) "12"
3) "beijing"
4) "10"
5) "20"
6) "89"

存储list(链表)常用命令

1.两端添加

  • lpush islist value1 value2 value3 …

向链表中添加数据,如果islist存在,更新islist,如果islist不存在,则创建

127.0.0.1:6379> lpush islist a b c d e f g 1 2 3 4 5
(integer) 12

2.查看

  • lrange islist 0 3

查看下标为0 到 3 的元素

  • lrange islist 0 -1

查看所有的元素,-1表示最后以为,-2表示倒数第二位,以此类推

127.0.0.1:6379> lrange islist 0 3
1) "5"
2) "4"
3) "3"
4) "2"
127.0.0.1:6379> lrange islist 0 -1   //由于链表的特性,添加的数据顺序是这样(不知道怎么形容0.0)
 1) "5"
 2) "4"
 3) "3"
 4) "2"
 5) "1"
 6) "g"
 7) "f"
 8) "e"
 9) "d"
10) "c"
11) "b"
12) "a"

3.两端弹出

  • lpop islist

从下标为0开始弹出,返回弹出的数据,做弹出操作后,islist中不再存在弹出的数据

127.0.0.1:6379> lrange islist 0 -1
 1) "5"
 2) "4"
 3) "3"
 4) "2"
 5) "1"
 6) "g"
 7) "f"
 8) "e"
 9) "d"
10) "c"
11) "b"
12) "a"
127.0.0.1:6379> lpop islist
"5"
127.0.0.1:6379> lpop islist
"4"
127.0.0.1:6379> lrange islist 0 -1
 1) "3"
 2) "2"
 3) "1"
 4) "g"
 5) "f"
 6) "e"
 7) "d"
 8) "c"
 9) "b"
10) "a"

4.获得list中元素的个数

  • llen islist

返回islist中元素的个数

127.0.0.1:6379> llen islist
(integer) 10

5.插入数据

  • lpushx islist value

向islist中插入value,如果islist存在,则插入value到头部,如果islist不存在,不插入value,也不会创建islist

127.0.0.1:6379> lpushx islist aa
(integer) 11
127.0.0.1:6379> lrange islist 0 -1
 1) "aa"
 2) "3"
 3) "2"
 4) "1"
 5) "g"
 6) "f"
 7) "e"
 8) "d"
 9) "c"
10) "b"
11) "a"
  • rpushx islist value

向islist中插入value,如果islist存在,则插入value到尾部,如果islist不存在,不插入value,也不会创建islist

127.0.0.1:6379> rpushx islist weibu
(integer) 12
127.0.0.1:6379> lrange islist 0 -1
 1) "aa"
 2) "3"
 3) "2"
 4) "1"
 5) "g"
 6) "f"
 7) "e"
 8) "d"
 9) "c"
10) "b"
11) "a"
12) "weibu"

6.删除

  • lrem islist count val

删除count个value为val的元素
count > 0 从头部开始删除count个value为val的元素
count < 0 从尾部开始删除count个value为val的元素
count = 0 删除所有value为val的元素

127.0.0.1:6379> lrange lllist 0 -1
1) "b"
2) "b"
3) "a"
4) "a"
5) "a"
127.0.0.1:6379> lrem lllist 2 a
(integer) 2
127.0.0.1:6379> lrange lllist 0 -1
1) "b"
2) "b"
3) "a"
127.0.0.1:6379> 

7.指定位置插入和修改

  • lset mylist index val

修改mylist中下标为index位置的元素值为val,下标从0开始

127.0.0.1:6379> lrange mylist 0 -1
1) "f"
2) "e"
3) "d"
4) "c"
5) "b"
6) "a"
127.0.0.1:6379> lset mylist 3 change
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "f"
2) "e"
3) "d"
4) "change"
5) "b"
6) "a"
  • linsert mylist before value val

向mylist中value的前面插入val

  • linsert mylist after value val

向mylist中value的后面插入val

127.0.0.1:6379> lrange mylist 0 -1
1) "f"
2) "e"
3) "d"
4) "change"
5) "b"
6) "a"
127.0.0.1:6379> linsert mylist before change bef
(integer) 7
127.0.0.1:6379> linsert mylist after change aft
(integer) 8
127.0.0.1:6379> lrange mylist 0 -1
1) "f"
2) "e"
3) "d"
4) "bef"
5) "change"
6) "aft"
7) "b"
8) "a"

8.弹出放入指定list

  • rpoplpush list1 list2

将list1中的元素(从尾部开始)弹出之后放入list2中

127.0.0.1:6379> lrange islist 0 -1
1) "aa"
2) "3"
3) "2"
4) "1"
5) "g"
6) "f"
7) "e"
8) "d"
9) "c"
127.0.0.1:6379> rpoplpush islist mylist
"c"
127.0.0.1:6379> lrange mylist 0 -1
 1) "c"
 2) "b"
 3) "weibu"
 4) "f"
 5) "e"
 6) "d"
 7) "bef"
 8) "change"
 9) "aft"
10) "b"
11) "a"

存储Set常用命令

Set中不能出现重复元素,并且没有序

1. 添加、查看、删除元素

  • sadd myset val1 val2 val3 …

向myset中添加数据,一次行可以添加多个,但是不能有重复元素,负责报错

127.0.0.1:6379> sadd myset a b c 1 2 3
(integer) 6
  • smembers myset

查看myset中所有的元素

127.0.0.1:6379> smembers myset
1) "b"
2) "1"
3) "c"
4) "2"
5) "a"
6) "3"
  • sismember myset a

检查myset中是否含有a这个元素,返回1则表示存在,返回0表示不存在

127.0.0.1:6379> sismember myset a
(integer) 1

2.差集、交集、并集

  • sdiff myset myset2

求出myset跟myset2的差集

127.0.0.1:6379> smembers myset
1) "c"
2) "b"
3) "2"
4) "a"
5) "1"
6) "3"
127.0.0.1:6379> smembers myset2
1) "c"
2) "a"
3) "2"
4) "3"
127.0.0.1:6379> sdiff myset myset2
1) "b"
2) "1"
  • sinter myset myset2

求出myset跟myset2的交集

127.0.0.1:6379> smembers myset
1) "c"
2) "b"
3) "2"
4) "a"
5) "1"
6) "3"
127.0.0.1:6379> smembers myset2
1) "c"
2) "a"
3) "2"
4) "3"
127.0.0.1:6379> sinter myset myset2
1) "c"
2) "a"
3) "2"
4) "3" 
  • sunion myset myset2

求出myset跟myset2的并集

127.0.0.1:6379> smembers myset2
1) "c"
2) "2"
3) "f"
4) "g"
5) "a"
6) "3"
127.0.0.1:6379> smembers myset
1) "c"
2) "b"
3) "2"
4) "a"
5) "1"
6) "3"
127.0.0.1:6379> sunion myset myset2
1) "f"
2) "b"
3) "2"
4) "g"
5) "a"
6) "1"
7) "3"
8) "c"

3.扩展命令

  • scard myset

返回myset中元素的个数

127.0.0.1:6379> scard myset
(integer) 6
  • srandmember myset

随机返回myset中的某个元素

127.0.0.1:6379> srandmember myset
"1"
127.0.0.1:6379> srandmember myset
"a"
127.0.0.1:6379> srandmember myset
"c"
  • sdiffstore setc seta setb

将seta与setb的差集存到setc中,覆盖setc中原有的元素

127.0.0.1:6379> smembers seta
1) "c"
2) "a"
3) "b"
127.0.0.1:6379> smembers setb
1) "d"
2) "c"
3) "b"
127.0.0.1:6379> smembers setc
1) "f"
127.0.0.1:6379> sdiffstore setc seta setb
(integer) 1
127.0.0.1:6379> smembers setc
1) "a"
  • sinterstore setc seta setb

将seta与setb的交集存到setc中,覆盖setc中原有的元素

127.0.0.1:6379> smembers seta
1) "c"
2) "a"
3) "b"
127.0.0.1:6379> smembers setb
1) "d"
2) "c"
3) "b"
127.0.0.1:6379> smembers setc
1) "a"
127.0.0.1:6379> sinterstore setc seta setb
(integer) 2
127.0.0.1:6379> smembers setc
1) "c"
2) "b"
  • sunionstroe setc seta setb

将seta与setb的并集存到setc中,覆盖setc中原有的元素

127.0.0.1:6379> smembers seta
1) "c"
2) "a"
3) "b"
127.0.0.1:6379> smembers setb
1) "d"
2) "c"
3) "b"
127.0.0.1:6379> smembers setc
1) "c"
2) "b"
127.0.0.1:6379> sunionstore setc seta setb
(integer) 4
127.0.0.1:6379> smembers setc
1) "b"
2) "c"
3) "a"
4) "d"

Sorted-Set常用命令

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。

1.添加

  • 添加元素:zadd mysort 10 a 20 b 30 c 40 d

分数对应后面的value,根据分数插入数据

127.0.0.1:6379> zadd mysort 10 a 20 b 30 c 40 d
(integer) 4
127.0.0.1:6379> zadd mysort 10 gg
(integer) 1

2.查看元素

  • zscore mysort a

返回mysort中value为a的分数

127.0.0.1:6379> zscore mysort a
"10"
  • zcard mysort

返回mysort中元素的个数

127.0.0.1:6379> zcard mysort
(integer) 5
  • zrange mysort 0 -1

查看所有的元素,下标从0开始到-1结束,-1表示倒数第一个元素

127.0.0.1:6379> zrange mysort 0 -1
1) "a"
2) "gg"
3) "b"
4) "c"
5) "d"
  • zrange mysort 0 -1 withscores

查看所有元素并且带分数

127.0.0.1:6379> zrange mysort 0 -1 withscores
 1) "a"
 2) "10"
 3) "gg"
 4) "10"
 5) "b"
 6) "20"
 7) "c"
 8) "30"
 9) "d"
10) "40"
  • zrevrange mysort 0 -1 withscores

从大到小排序查看

127.0.0.1:6379> zrevrange mysort 0 -1 withscores
 1) "d"
 2) "40"
 3) "c"
 4) "30"
 5) "b"
 6) "20"
 7) "gg"
 8) "10"
 9) "a"
10) "10"
  • zrangebyscore mysort 0 20

查看分数0-20的元素

127.0.0.1:6379> zrangebyscore mysort 0 20
1) "a"
2) "gg"
3) "b"
  • zrangebyscore mysort 0 20 withscores

查看分数0-20的分数跟元素

127.0.0.1:6379> zrangebyscore mysort 0 20 withscores
1) "a"
2) "10"
3) "gg"
4) "10"
5) "b"
6) "20"
  • zrangebyscore mysort 0 20 withscores limit 0 2

分组显示2个数据

127.0.0.1:6379> zrangebyscore mysort 0 20 withscores limit 0 2
1) "a"
2) "10"
3) "gg"
4) "10"
  • zcount mysort 10 20

返回分数在10-20之间的元素的个数

127.0.0.1:6379> zcount mysort 10 20 
(integer) 3

3.删除

  • zremrangebyrank mysort 0 4

按照下标的范围进行删除

127.0.0.1:6379> zrange mysort 0 -1
1) "a"
2) "gg"
3) "b"
4) "c"
5) "d"
127.0.0.1:6379> zremrangebyrank mysort 0 1
(integer) 2
127.0.0.1:6379> zrange mysort 0 -1
1) "b"
2) "c"
3) "d"
  • zremrangebyscore mysort 30 40

按照分数范围删除

127.0.0.1:6379> zremrangebyscore mysort 30 40
(integer) 2
127.0.0.1:6379> zrange mysort 0 -1
1) "b"
  • zrem mysort b d

删除mysort中的b跟d两个元素

127.0.0.1:6379> zrange mysrot 0 -1
1) "d"
2) "f"
3) "i"
127.0.0.1:6379> zrem mysrot  d
(integer) 1
127.0.0.1:6379> zrange mysrot 0 -1
1) "f"
2) "i"

4.扩展

  • zincrby mysrot 4 f

给f的分数增加4

127.0.0.1:6379> zrange mysrot 0 -1 withscores
1) "f"
2) "14"
3) "i"
4) "17"
127.0.0.1:6379> zincrby mysrot 4 f
"18"
127.0.0.1:6379> zrange mysrot 0 -1 withscores
1) "i"
2) "17"
3) "f"
4) "18"

如果有错请指出,谢谢!0.0

猜你喜欢

转载自blog.csdn.net/news_out/article/details/85157307