redis中的命令不区分大小写,详细命令可参考官方文档:http://www.redis.cn/commands.html

String(字符串)

设置值获取值:set,get

127.0.0.1:6379> set key1 v1 #设置值
OK
127.0.0.1:6379> get key1 #获得值
"v1"
127.0.0.1:6379> APPEND key1 "hello" #往当前key的值中追加字符串,如果当前key不存在,就创建(相当于set key value)
(integer) 7
127.0.0.1:6379> get key1 
"v1hello"
127.0.0.1:6379> STRLEN key1 #获取字符串的长度
(integer) 7
127.0.0.1:6379> APPEND key1 ",sovzn"  
(integer) 13
127.0.0.1:6379> STRLEN key1
(integer) 13
127.0.0.1:6379> get key1
"v1hello,sovzn"
127.0.0.1:6379> 

自增自减:incr,dicr

127.0.0.1:6379> set views 0 # 设置初始值为 0
OK
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> incr views #incr 自增 1
(integer) 1
127.0.0.1:6379> incr views
(integer) 2
127.0.0.1:6379> incr views
(integer) 3
127.0.0.1:6379> get views
"3"
127.0.0.1:6379> decr views #decr 自减 1
(integer) 2
127.0.0.1:6379> decr views
(integer) 1
127.0.0.1:6379> decr views
(integer) 0
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> incrby views 10 #incrby:"10"为步长,即每次自增 10 
(integer) 10
127.0.0.1:6379> get views
"10"
127.0.0.1:6379> decrby views 10 #自减 10
(integer) 0
127.0.0.1:6379> get views
"0"

字符串范围

#########获取字符串GETRANGE
127.0.0.1:6379> set name hello,shiyaochang
OK
127.0.0.1:6379> getrange name 0 3 #获取当前key的[0,3]位字符串
"hell"
127.0.0.1:6379> getrange name 0 -1 # 0到-1表示获取全部的字符串和get key一样
"hello,shiyaochang"

########替换SETRANGE
127.0.0.1:6379> setrange name 6 sovzn #从第六位开始替换
(integer) 17
127.0.0.1:6379> get name
"hello,sovznochang"
127.0.0.1:6379> 

setex和setnx

########setex(set with expire):设置过期时间
127.0.0.1:6379> setex key 30 hello # 设置值为hello的key,并设置过期时间
OK
127.0.0.1:6379> ttl key #查看剩余时间
(integer) 4
127.0.0.1:6379> ttl key
(integer) -2
#########setnx(set if not exist ):不存在就设置(在分布式锁中会常常使用)
127.0.0.1:6379> setnx mykey sovzn #若不存在名为mykey的key就创建
OK
127.0.0.1:6379> keys *
1) "mykey"
127.0.0.1:6379> setnx mykey syc #已存在mykey,不会再创建syc
(integer) 0
127.0.0.1:6379> keys *
1) "mykey"

批量操作

127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 #同时设置多个值
OK
127.0.0.1:6379> keys * 
1) "k3"
2) "k1"
3) "k2"
127.0.0.1:6379> mget k1 k2 k3   #同时获取多个值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx k1 v1 k4 v4 #setnx也具有原子性,虽然卡可k4不存在,但是k1已经存在,所以k4也不会创建
(integer) 0
127.0.0.1:6379> keys *
1) "k3"
2) "k1"
3) "k2"
127.0.0.1:6379> 

getset

127.0.0.1:6379> getset name sovzn #不存在name则返回nil,并设置name值
(nil)
127.0.0.1:6379> getset name shiyaochang # 返回name值,并设置新的name值
"sovzn"
127.0.0.1:6379> get name
"shiyaochang"

List(列表)

大多的list命令都是以” L”开头的

添加元素:lpush和rpush

lrange list 0 -1 获取列表list的全部值

127.0.0.1:6379> lpush list one  #将一个或多个值插入到列表list的头部(左)
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lrange list 0 -1 #获取列表list的全部值
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lrange list 0 1 #获取指定区间的值
1) "three"
2) "two" 
127.0.0.1:6379> rpush list four #将一个过多个值插入到列表尾部(右)
(integer) 4
127.0.0.1:6379> lrange list 0 -1 
1) "three"
2) "two"
3) "one"
4) "four"

移除元素:lpop和rpop

127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "four"
127.0.0.1:6379> lpop list #移除list的第一个元素
"three"
127.0.0.1:6379> rpop list #移除list的最后一个元素
"four"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> 

获取元素:Lindex

127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> lindex list 0
"two"
127.0.0.1:6379> lindex list 1 #通过下标获取list的某一个值
"one"
127.0.0.1:6379> 

修改元素:lset

# Lset:将列表中指定下表的值替换为另一个值,相当于更新操作
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lset list 1 one #将list中下标为1的元素修改为one
OK
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "one"
3) "one"
127.0.0.1:6379> 

获取list的长度:Llen

127.0.0.1:6379> lpush list one
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lpush list four
(integer) 4
127.0.0.1:6379> lpush list five
(integer) 5
127.0.0.1:6379> llen list #返回列表的长度
(integer) 5
127.0.0.1:6379> 

移除指定的值:lrem

#lrem:移除list中指定个数的value
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "two"
4) "one"
127.0.0.1:6379> lrem list 1  one #移除一个one元素
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "two"
127.0.0.1:6379> lrem list 2 two #移除两个two元素
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "three"
127.0.0.1:6379> 

修剪list:ltrim

127.0.0.1:6379> lpush list one
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lpush list four
(integer) 4
127.0.0.1:6379> ltrim list 1 2 #修剪list,只留下[1,2]的元素
OK
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"

rpoplpush

rpoplpush:移除列表中的最后一个元素,并把这个元素插入到新的列表中

127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> rpoplpush list mylist #把list的最后一个元素移除,并移动到mylist中,若mylist不存在就创建
"one"
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
127.0.0.1:6379> lrange mylist 0 -1
1) "one"
127.0.0.1:6379> 

linsert

# 将某个具体的值插入到列表中的某个元素的前面或者后面
127.0.0.1:6379> lpush list hello
(integer) 1
127.0.0.1:6379> lpush list shiyaochang
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "shiyaochang"
2) "hello"
127.0.0.1:6379> linsert list after hello say #将"say"插入到元素hello的后面
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "shiyaochang"
2) "hello"
3) "say"
127.0.0.1:6379> linsert list before  hello haha #将"haha"插入到元素hello的前面
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "shiyaochang"
2) "haha"
3) "hello"
4) "say"
127.0.0.1:6379> 

总结

  • list底层是快速链表,快速链表相对于普通链表使用的是连续地址空间块,当数据过多的时候,通过指针连接地址空间块
  • 如果移除list的所有值,即空链表,也代表不存在
  • 在两边插入或者改动值效率最高,中间元素,相对来说效率会低一点

Set(集合)

set中的值是不可以重复的

添加元素:sadd

  • sadd:添加元素
  • scard:获取元素个数

查看集合中的所欲元素:smembers

127.0.0.1:6379> sadd myset sovzn
(integer) 1
127.0.0.1:6379> sadd myset syc
(integer) 1
127.0.0.1:6379> sadd myset shiyaochang
(integer) 1
127.0.0.1:6379> smembers myset #查看set集合中的所有值
1) "sovzn"
2) "shiyaochang"
3) "syc"
127.0.0.1:6379> scard myset #获取set中值的个数
(integer) 3

判断是否包含某个值:sismember

127.0.0.1:6379> smembers myset
1) "sovzn"
2) "shiyaochang"
3) "syc"
127.0.0.1:6379> sismember myset sovzn #判断是否包含sovzn
(integer) 1
127.0.0.1:6379> sismember myset so #判断是否包含so
(integer) 0

移除元素:srem和spop

  • srem:移除指定元素
  • spop:随机移除元素
#srem:移除指定的元素
127.0.0.1:6379> smembers myset
1) "sovzn"
2) "shiyaochang"
3) "syc"
127.0.0.1:6379> srem myset sovzn  #移除myset中的sovzn
(integer) 1
127.0.0.1:6379> smembers myset
1) "shiyaochang"
2) "syc"
127.0.0.1:6379> smembers myset
1) "syc"
2) "so"
3) "love"
4) "sovzn"
5) "shiyaochang"
6) "ainiya"
127.0.0.1:6379> spop myset #随机移除myset中的一个元素
"shiyaochang"
127.0.0.1:6379> spop myset #随机移除myset中的一个元素
"syc"
127.0.0.1:6379> spop myset  2 #随机移除myset中的两个元素
1) "ainiya"
2) "sovzn"
127.0.0.1:6379> smembers myset
1) "so"
2) "love"

随机抽取元素:srandmember

127.0.0.1:6379> smembers myset
1) "sovzn"
2) "shiyaochang"
3) "syc"
4) "so"
5) "love"
6) "ainiya"
127.0.0.1:6379> srandmember myset #随机抽取一个元素
"so"
127.0.0.1:6379> srandmember myset 
"ainiya"
127.0.0.1:6379> srandmember myset 
"so"
127.0.0.1:6379> srandmember myset  2#随机抽取两个元素
1) "so"
2) "syc"

smove

smove:移动元素到指定的set中

127.0.0.1:6379> sadd myset hello syc sovzn soso
(integer) 4
127.0.0.1:6379> smembers myset
1) "soso"
2) "sovzn"
3) "syc"
4) "hello"
127.0.0.1:6379> sadd myset1 newset
(integer) 1
127.0.0.1:6379> smove myset myset1 sovzn#将myset中的"sovzn"元素移动到myset1中
(integer) 1
127.0.0.1:6379> smembers myset1
1) "sovzn"
2) "newset"

集合间元素的交叉并集

  • 差集:sdiff
  • 交集:sinter
  • 并集:sunion
127.0.0.1:6379> sadd key1 a
(integer) 1
127.0.0.1:6379> sadd key1 b
(integer) 1
127.0.0.1:6379> sadd key1 c
(integer) 1
127.0.0.1:6379> sadd key2 c
(integer) 1
127.0.0.1:6379> sadd key2 d
(integer) 1
127.0.0.1:6379> sadd key2 e
(integer) 1
127.0.0.1:6379> sdiff key1 key2 # 差集:查出key1相对于key2所独有的元素
1) "a"
2) "b"
127.0.0.1:6379> sinter key1 key2 # 交集:查出key1和key2的公有元素
1) "c"
127.0.0.1:6379> sunion key1 key2 # 并集:查出key1和key2所包含的所有元素
1) "b"
2) "c"
3) "a"
4) "e"
5) "d"

Hash(哈希)

对于hash类型:相当于key-map,即key所对应的值是一个map集合!

存取操作

  • hset:设置一个值
  • hget:获取单个值
  • hmset:设置多个值
  • hmget:获取多个值
  • hgetall:获取所有值
  • hlen:查看hash的大小(包好多好个键值对)
127.0.0.1:6379> hset myhash field1 v1 #向myhash中添加一个key-value
(integer) 1
127.0.0.1:6379> hget myhash field1 #获取一个字段值
"v1"
127.0.0.1:6379> hmset myhash field1 v1 field2 v2 #向myhash中添加多个key-value
OK
127.0.0.1:6379> hmget myhash field1 field2 #获取多个字段值
1) "v1"
2) "v2"
127.0.0.1:6379> hgetall myhash#获取全部数据,以键值对的形式展示
1) "field1"
2) "v1"
3) "field2"
4) "v2"
127.0.0.1:6379> hlen myhash #查看myhash的大小
(integer) 2 #包含两个键值对

127.0.0.1:6379> hget myhash field1
"v1"
127.0.0.1:6379> hset myhash field1 v2222
(integer) 0
127.0.0.1:6379> hget myhash field1
"v2222"

删除hash指定的字段:hdel

127.0.0.1:6379> hgetall myhash
1) "field1"
2) "v2222"
3) "field2"
4) "v2"
127.0.0.1:6379> hdel myhash field1 #删除myhash中的field1以及它所对应的值
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "field2"
2) "v2"
127.0.0.1:6379> 

判断hash是否含有指定字段key:hexists

127.0.0.1:6379> hgetall myhash
1) "field2"
2) "v2"
127.0.0.1:6379> hexists myhash field2 #判断myhash中是否含有field2
(integer) 1
127.0.0.1:6379> hexists myhash field1#判断myhash中是否含有field1
(integer) 0
127.0.0.1:6379> 

只获取hash中的key

127.0.0.1:6379> hgetall myhash
1) "field2"
2) "v2"
3) "field1"
4) "v1"
5) "field3"
6) "v3"
7) "field4"
8) "v4"
127.0.0.1:6379> hkeys myhash #只获取所有的key
1) "field2"
2) "field1"
3) "field3"
4) "field4"
127.0.0.1:6379> hvals myhash #只获取多有的值
1) "v2"
2) "v1"
3) "v3"
4) "v4"
127.0.0.1:6379> 

其他命令:

127.0.0.1:6379> hset myhash views 0
(integer) 1
127.0.0.1:6379> hget myhash vieww
(nil)
127.0.0.1:6379> hget myhash views
"0"
127.0.0.1:6379> hincrby myhash views 4 # views所对应的值自增4
(integer) 4
127.0.0.1:6379> hget myhash views
"4"
127.0.0.1:6379> hincrby myhash views -2 # views所对应的值自增-2 即减2
(integer) 2
127.0.0.1:6379> hget myhash views
"2"
127.0.0.1:6379> hsetnx myhash field8 v8 #如果在myhash中不存在field8,就创建
(integer) 1
127.0.0.1:6379> hsetnx myhash field8 v8
(integer) 0
127.0.0.1:6379> hgetall myhash
 1) "field2"
 2) "v2"
 3) "field1"
 4) "v1"
 5) "field3"
 6) "v3"
 7) "field4"
 8) "v4"
 9) "views"
10) "2"
11) "field8"
12) "v8"
127.0.0.1:6379> 

Zset(有序集合)

在set的基础上增加了一个值score(序号)

存取元素:zset,zrange

127.0.0.1:6379> zadd myzset 1 one#存一个值,“1”为score的值
(integer) 1
127.0.0.1:6379> zadd myzset 2 two
(integer) 1
127.0.0.1:6379> zadd myzset 3 three
(integer) 1
127.0.0.1:6379> zrange myzset 0 -1 #获取所有值
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> zadd myzset 4 four  5 five#存多个值
(integer) 2
127.0.0.1:6379> zrange myzset 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
5) "five"
127.0.0.1:6379> 

排序:zrange,zrangebyscore,zrevrange

127.0.0.1:6379> zadd salary 2500 xiaohong
(integer) 1
127.0.0.1:6379> zadd salary 5000  sovzn
(integer) 1
127.0.0.1:6379> zadd salary 50    syc
(integer) 1 
127.0.0.1:6379> zrangebyscore salary -inf +inf #从小到大排序
1) "syc"
2) "xiaohong"
3) "sovzn"
#############
127.0.0.1:6379> zrange salary 0 -1  #从小到大排序
1) "syc"
2) "xiaohong"
3) "sovzn"
#############
127.0.0.1:6379> zrevrange salary 0 -1  #从大到小排序
1) "sovzn"
2) "xiaohong"
3) "sovzn"

127.0.0.1:6379> zrangebyscore salary -inf +inf withscores #从小到大排序,且一并返回score值
1) "syc"
2) "50"
3) "xiaohong"
4) "2500"
5) "sovzn"
6) "5000"
127.0.0.1:6379> zrangebyscore salary -inf 2500 withscores #从小到大排序score小于2500的值
1) "syc"
2) "50"
3) "xiaohong"
4) "2500"
127.0.0.1:6379> 

移除元素:zrem

127.0.0.1:6379> zrange salary 0 -1
1) "syc"
2) "xiaohong"
3) "sovzn"
127.0.0.1:6379> zrem salary syc #移除有序集合salary中的元素syc
(integer) 1
127.0.0.1:6379> zrange salary 0 -1
1) "xiaohong"
2) "sovzn"
127.0.0.1:6379> 

获取有序集合元素个数:zcard

127.0.0.1:6379> zrange salary 0 -1
1) "xiaohong"
2) "sovzn"
127.0.0.1:6379> zcard salary
(integer) 2
127.0.0.1:6379> 

获取指定区间的元素格式:zcount

127.0.0.1:6379> zadd zset 1 one
(integer) 1
127.0.0.1:6379> zadd zset 2 two
(integer) 1
127.0.0.1:6379> zadd zset 3 three
(integer) 1
127.0.0.1:6379> zadd zset 4 four
(integer) 1
127.0.0.1:6379> zadd zset 5 five 
(integer) 1
127.0.0.1:6379> zadd zset 6 six
(integer) 1
127.0.0.1:6379> zrange zset 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
5) "five"
6) "six"
127.0.0.1:6379> zcount zset 1 3#获取score在[1,3]之间的元素个数
(integer) 3
127.0.0.1:6379>