1.切换数据库 select
# redis默认有16个数据库,默认使用第0个数据库
# select 数据库序列
127.0.0.1:6379> select 2 #切换第二个数据库
OK
127.0.0.1:6379[2]> DBSIZE #查看数据大小
(integer) 0
127.0.0.1:6379[2]> set ss 123
OK
127.0.0.1:6379[2]> DBSIZE
(integer) 1
127.0.0.1:6379[2]> keys * #查看当前数据库所有 key
1) "ss"
2.清空当前数据库 flushdb
127.0.0.1:6379[2]> flushdb #清空当前数据库
OK
127.0.0.1:6379[2]> keys *
(empty array)
3.清空全部数据库 flushall
127.0.0.1:6379[2]> select 0
OK
127.0.0.1:6379> keys *
1) "counter:{tag}:__rand_int__"
2) "mylist:{tag}"
3) "key:{tag}:__rand_int__"
4) "myhash:{tag}:__rand_int__"
5) "aa"
127.0.0.1:6379> select 2
OK
127.0.0.1:6379[2]> keys *
(empty array)
127.0.0.1:6379[2]> flushall # flushall 清除所有数据库
OK
127.0.0.1:6379[2]> select 0
OK
127.0.0.1:6379> keys *
(empty array)
4.key的使用
命令 | 描述 |
---|---|
exists | 查看当前key是否存在 |
expire | 设置当前key过期时间 |
ttl | 查看当前key剩余过期时间 |
move | 移除当前的key |
type | 查看当前key的类型 |
127.0.0.1:6379[2]> set ss 123
OK
127.0.0.1:6379[2]> exists ss #查看key是否存在
(integer) 1
127.0.0.1:6379[2]> exists sss
(integer) 0
127.0.0.1:6379[2]> get ss
"123"
127.0.0.1:6379[2]> expire ss 20 # expire 设置过期时间 时间20s
(integer) 1
127.0.0.1:6379[2]> ttl ss # ttl 查看当前key剩余过期时间
(integer) 12
127.0.0.1:6379[2]> ttl ss
(integer) 8
127.0.0.1:6379[2]> ttl ss
(integer) 3
127.0.0.1:6379[2]> ttl ss
(integer) -2
127.0.0.1:6379[2]> get ss
(nil)
127.0.0.1:6379[2]> keys *
1) "ss"
127.0.0.1:6379[2]> move ss 1 # move 移除当前的key
(integer) 1
127.0.0.1:6379[2]> keys *
(empty array)
127.0.0.1:6379[2]> type ss # type key 查看当前key的类型
string
5.五大数据类型
5.1 String (字符串)
-
set 新增key-value
set key value
-
get 获取当前key的value
get key
-
append 追加字符串,若当前key不存在,相当于新增当前key(set操作)
append key value
-
strlen 查看当前key的value的长度
strlen key
127.0.0.1:6379[2]> set key v1 #新增key-value
OK
127.0.0.1:6379[2]> get key #获取当前key的value
"v1"
127.0.0.1:6379[2]> append key hello,word! # 追加字符串,若当前key不存在,相当于新增当前key
(integer) 13
127.0.0.1:6379[2]> strlen key #查看当前key的value的长度
(integer) 13
127.0.0.1:6379[2]> get key
"v1hello,word!"
127.0.0.1:6379[2]> keys *
1) "key"
2) "ss"
127.0.0.1:6379[2]> append cc 22aa #若当前key不存在,相当于新增当前key(set操作)
(integer) 4
127.0.0.1:6379[2]> keys *
1) "cc"
2) "key"
3) "ss"
- incr 自增操作相当于 i++
incr key
- decr 自减操作相当于 i--
decr key
- incrby 设置步长,相当于 i+=n
incrby key 步长
- decrby 设置步长,相当于 i-=n
decrby key 步长
127.0.0.1:6379[4]> set v1 0
OK
127.0.0.1:6379[4]> incr v1 #自增操作
(integer) 1
127.0.0.1:6379[4]> incr v1
(integer) 2
127.0.0.1:6379[4]> incr v1
(integer) 3
127.0.0.1:6379[4]> get v1
"3"
127.0.0.1:6379[4]> decr v1 #自减操作
(integer) 2
127.0.0.1:6379[4]> decr v1
(integer) 1
127.0.0.1:6379[4]> get v1
"1"
127.0.0.1:6379[4]> incrby v1 5 #设置步长,每次增加5
(integer) 11
127.0.0.1:6379[4]> get v1
"6"
127.0.0.1:6379[4]> incrby v1 5
(integer) 16
127.0.0.1:6379[4]> incrby v1 5
(integer) 21
127.0.0.1:6379[4]> decrby v1 8 #设置步长,每次减去8
(integer) 13
127.0.0.1:6379[4]> decrby v1 8
(integer) 5
127.0.0.1:6379[4]> get v1
"5"
- getrange 截取字符串
getrange key start end
- setrange 替换字符串
setrange key start xxx
127.0.0.1:6379[4]> flushdb
OK
127.0.0.1:6379[4]> set b1 "hello word!"
OK
127.0.0.1:6379[4]> get b1
"hello word!"
127.0.0.1:6379[4]> getrange b1 0 3 #截取字符串
"hell"
127.0.0.1:6379[4]> getrange b1 0 -2 #如果结束端点为负值的话,为获取全部字符串
"hello word"
127.0.0.1:6379[4]> getrange b1 0 0
"h"
127.0.0.1:6379[4]> getrange b1 0 -1
"hello word!"
127.0.0.1:6379[4]> setrange b1 2 zzz #修改字符串 从指定位置开始替换
(integer) 11
127.0.0.1:6379[4]> get b1
"hezzz word!"
127.0.0.1:6379[4]> setrange b1 5 zzzzzzzzzzzzzzzz #超出部分自动追加
(integer) 21
127.0.0.1:6379[4]> get b1
"hezzzzzzzzzzzzzzzzzzz"
- setex 设置过期时间
setex key x value
- setnx 当前key不存在时创建
setnx key value
127.0.0.1:6379[4]> setex k1 50 value1 #设置过期时间
OK
127.0.0.1:6379[4]> ttl k1
(integer) 35
127.0.0.1:6379[4]> keys *
1) "c1"
2) "b1"
3) "k1"
127.0.0.1:6379[4]> ttl k1
(integer) 18
127.0.0.1:6379[4]> ttl k1
(integer) -2
127.0.0.1:6379[4]> get k1
(nil)
127.0.0.1:6379[4]> keys *
1) "c1"
2) "b1"
127.0.0.1:6379[4]> set k2 aal
OK
127.0.0.1:6379[4]> keys *
1) "k2"
2) "c1"
3) "b1"
#当前key不存在时创建,当前key存在时创建失败
127.0.0.1:6379[4]> setnx k2 lslsl
(integer) 0
127.0.0.1:6379[4]> get k2
"aal"
127.0.0.1:6379[4]> setnx k3 sssl
(integer) 1
127.0.0.1:6379[4]> keys *
1) "k3"
2) "k2"
3) "c1"
4) "b1"
127.0.0.1:6379[4]> get k3
"sssl"
- mset 同时新增多个值
mset k1 v1 k2 v2 k3 v3
- mget 同时获取多个值
mget k1 k2 k3
- msetnx 同时处理多个,当前key不存在时创建
msetnx k1 v1 k2 v2
(是一个原子性操作,当有一个key创建失败时,整个操作失败)
127.0.0.1:6379[4]> keys *
(empty array)
127.0.0.1:6379[4]> mset k1 v1 k2 v2 k3 v3 #同时新增多个值
OK
127.0.0.1:6379[4]> mget k1 k2 k3 #同时获取多个值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379[4]> msetnx k4 v4
(integer) 1
127.0.0.1:6379[4]> keys *
1) "k4"
2) "k3"
3) "k2"
4) "k1"
127.0.0.1:6379[4]> msetnx k5 v5 k6 v6
(integer) 1
127.0.0.1:6379[4]> keys *
1) "k2"
2) "k6"
3) "k4"
4) "k3"
5) "k5"
6) "k1"
# 同时处理多个,当前key不存在时创建 `msetnx k1 v1 k2 v2`(是一个原子性操作,当有一个key创建失败时,整个操作失败)
127.0.0.1:6379[4]> msetnx k5 v5 k8 v8
(integer) 0
127.0.0.1:6379[4]> keys *
1) "k2"
2) "k6"
3) "k4"
4) "k3"
5) "k5"
6) "k1"
设置一个对象 user:1 {name:zhangsan,gender:nan}
,key的设计 user:{id}:{filed}
127.0.0.1:6379[4]> mset user:1:name zhangsan user:1:gender nan
OK
127.0.0.1:6379[4]> mget user:1:name user:1:gender
1) "zhangsan"
2) "nan"
-
getset 先get后set
1.如果当前key不存在,先返回null,然后创建
2.如果当前key存在,先返回当前value,然后重新设置当前key的值
127.0.0.1:6379[4]> keys *
1) "k2"
2) "user:1:name"
3) "k6"
4) "k4"
5) "user:1:gender"
6) "k3"
7) "k5"
8) "k1"
127.0.0.1:6379[4]> flushdb
OK
127.0.0.1:6379[4]> keys *
(empty array)
127.0.0.1:6379[4]> getset v1 hello # 如果当前key不存在,先返回null,然后创建
(nil)
127.0.0.1:6379[4]> get v1
"hello"
127.0.0.1:6379[4]> getset v1 word # 如果当前key存在,先返回当前value,然后重新设置当前key的值
"hello"
127.0.0.1:6379[4]> get v1
"word"
5.2 List (列表)
- lpush 将一个值或者多个值插入列表头(左边)部
- rpush 将一个值或者多个值插入列表尾(右边)部
- lrange 获取列表的值(可获取列表区间的值)
- lpop 移除列表的元素,从左边开始
- rpop 移除列表的元素,从右边开始
- lindex 索引
- llen 获取列表的长度
- lrem 移除指定个数的value,精确匹配
- trim 截取元素区间的值
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> lpush list one two three #将一个值或者多个值插入列表头(左边)部
(integer) 3
127.0.0.1:6379> lrange list 0 -1 #获取列表全部的值
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 aa bb cc #将一个值或者多个值插入列表尾(右边)部
(integer) 6
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "aa"
5) "bb"
6) "cc"
127.0.0.1:6379> lpop list #移除列表的第一个元素,从左边开始
"three"
127.0.0.1:6379> rpop list #移除列表的第一个元素,从右边开始
"cc"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
3) "aa"
4) "bb"
127.0.0.1:6379> lindex list 0 #获取列表的第1个元素
"two"
127.0.0.1:6379> lindex list 1
"one"
127.0.0.1:6379> lindex list 2
"aa"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
3) "aa"
4) "bb"
127.0.0.1:6379> llen list #获取列表的长度
(integer) 4
127.0.0.1:6379> lpush list one one one two
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
3) "one"
4) "one"
127.0.0.1:6379> lrem list 1 one #移除指定个数的value,精确匹配
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
3) "one"
127.0.0.1:6379> lrem list 2 one
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "two"
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> lpush li one two three four five
(integer) 5
127.0.0.1:6379> lrange li 0 -1
1) "five"
2) "four"
3) "three"
4) "two"
5) "one"
127.0.0.1:6379> ltrim li 1 2 #截取元素区间的值
OK
127.0.0.1:6379> lrange li 0 -1
1) "four"
2) "three"
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> rpush li one two three four five
(integer) 5
127.0.0.1:6379> lrange li 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
5) "five"
127.0.0.1:6379> ltrim li 1 2
OK
127.0.0.1:6379> lrange li 0 -1
1) "two"
2) "three"
- rpoplpush 移除列表的最后一个元素,将它移动到新的列表中
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> lpush li one two three
(integer) 3
127.0.0.1:6379> rpoplpush li ki
"one"
127.0.0.1:6379> lrange li 0 -1
1) "three"
2) "two"
127.0.0.1:6379> lrange ki 0 -1
1) "one"
- lset 将列表指定下标替换为另一个值
127.0.0.1:6379> lpush list aa
(integer) 1
127.0.0.1:6379> rpop list
"aa"
127.0.0.1:6379> exists list
(integer) 0
127.0.0.1:6379> lset list 0 it #当列表无值时,替换失败
(error) ERR no such key
127.0.0.1:6379> lpush list hello
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "hello"
127.0.0.1:6379> lset list 0 it #将第1个值替换为指定value
OK
127.0.0.1:6379> lrange list 0 -1
1) "it"
127.0.0.1:6379> lset list 1 it #当列表索引不存在时,替换失败
(error) ERR index out of range
- linsert 将某一个具体的值插入到列表中某个元素的前面后者后面
127.0.0.1:6379> rpush list aa bb cc
(integer) 3
127.0.0.1:6379> linsert list before bb dd #将某一个具体的值插入到列表中某个元素的前面
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "aa"
2) "dd"
3) "bb"
4) "cc"
127.0.0.1:6379> linsert list after bb ff #将某一个具体的值插入到列表中某个元素的后面
(integer) 5
127.0.0.1:6379> lrange list 0 -1
1) "aa"
2) "dd"
3) "bb"
4) "ff"
5) "cc"
5.3 Set (集合)
无序,不重复集合;
- sadd 给集合中添加元素
- smembers 查看指定集合的所有值
- sismember 判断某一个值是否在此集合中
- scard 查看集合中的元素个数
- srem 移除集合中指定元素
- srandmember 随机抽选元素(个数可指定)
- spop 随机删除集合中的某些元素,可指定多个
127.0.0.1:6379> sadd myset aa bb cc #给集合中添加元素
(integer) 3
127.0.0.1:6379> smembers myset #查看指定集合的所有值
1) "cc"
2) "aa"
3) "bb"
# 判断某一个值是否在此集合中 如果在返回1,不在返回0
127.0.0.1:6379> sismember myset bb
(integer) 1
127.0.0.1:6379> sismember myset dd
(integer) 0
127.0.0.1:6379> scard myset # 查看集合中的元素个数
(integer) 3
127.0.0.1:6379> smembers myset
1) "cc"
2) "aa"
3) "bb"
127.0.0.1:6379> sadd myset cc #set类型,value不可重复
(integer) 0
127.0.0.1:6379> srem myset aa #移除集合中指定元素
(integer) 1
127.0.0.1:6379> smembers myset
1) "cc"
2) "bb"
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd myset aa bb cc dd ff ee
(integer) 6
127.0.0.1:6379> srandmember myset #随机抽选1个元素
"aa"
127.0.0.1:6379> srandmember myset
"dd"
127.0.0.1:6379> srandmember myset
"bb"
127.0.0.1:6379> srandmember myset
"bb"
127.0.0.1:6379> srandmember myset 2 #随机抽选2个元素
1) "dd"
2) "cc"
127.0.0.1:6379> srandmember myset 2
1) "cc"
2) "bb"
127.0.0.1:6379> srandmember myset 2
1) "ff"
2) "ee"
127.0.0.1:6379> srandmember myset 3 #随机抽选3个元素
1) "dd"
2) "bb"
3) "ee"
127.0.0.1:6379> srandmember myset 3
1) "aa"
2) "cc"
3) "ff"
127.0.0.1:6379> smembers myset
1) "dd"
2) "aa"
3) "bb"
4) "cc"
5) "ff"
6) "ee"
127.0.0.1:6379> spop myset #随机删除集合中的1个元素
"bb"
127.0.0.1:6379> smembers myset
1) "dd"
2) "aa"
3) "cc"
4) "ff"
5) "ee"
127.0.0.1:6379> spop myset 2 #随机删除集合中的2个元素
1) "ff"
2) "dd"
127.0.0.1:6379> smembers myset
1) "aa"
2) "cc"
3) "ee"
- smove 将一个指定的值移动到另一个集合中
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd li aa bb cc dd
(integer) 4
127.0.0.1:6379> sadd li1 tt
(integer) 1
127.0.0.1:6379> smembers li
1) "dd"
2) "cc"
3) "aa"
4) "bb"
127.0.0.1:6379> smembers li1
1) "tt"
127.0.0.1:6379> smove li li1 aa #将一个指定的值移动到另一个集合中
(integer) 1
127.0.0.1:6379> smembers li
1) "dd"
2) "cc"
3) "bb"
127.0.0.1:6379> smembers li1
1) "tt"
2) "aa"
- sdiff 取两个集合的差集
- sinter 取两个集合的交集
- sunion 取两个集合的并集
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd set1 a b c
(integer) 3
127.0.0.1:6379> sadd set2 c d e
(integer) 3
127.0.0.1:6379> sdiff set1 set2 #差集
1) "b"
2) "a"
127.0.0.1:6379> sinter set1 set2 #交集
1) "c"
127.0.0.1:6379> sunion set1 set2 #并集
1) "a"
2) "c"
3) "b"
4) "e"
5) "d"
5.4 Hash (哈希)
Map集合,key-Map;
- hset 新增一个key-Map
- hmset 新增多个key-Map
- hget 获取一个key-Map
- hmget 获取多个key-Map
- hgetall 获取全部key-Map
- hdel 删除hash指定的key字段,对应的value也会被删除
- hlen 查看当前hash的元素个数
127.0.0.1:6379> hset myhash k1 v1 #新增一个key-Map
(integer) 1
# 新增多个key-Map
127.0.0.1:6379> hmset myhash k1 v1 k2 v2 k3 v3
OK
# 获取一个key-Map
127.0.0.1:6379> hget myhash k1
"v1"
#获取多个key-Map
127.0.0.1:6379> hmget myhash k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
# 获取全部key-Map
127.0.0.1:6379> hgetall myhash
1) "k1"
2) "v1"
3) "k2"
4) "v2"
5) "k3"
6) "v3"
# 删除hash指定的key字段,对应的value也会被删除
127.0.0.1:6379> hdel myhash k1
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "k2"
2) "v2"
3) "k3"
4) "v3"
# 查看当前hash的元素个数
127.0.0.1:6379> hlen myhash
(integer) 2
- hexists 判断当前hash中指定key是否存在
- hkeys 获取当前hash的所有key
- hvals 获取当前hash的所有value
- hincrby 设置增量
- hsetnx 判断当前hash中是否存在此key,不存在即创建,存在创建失败
127.0.0.1:6379> hgetall myhash
1) "k2"
2) "v2"
3) "k3"
4) "v3"
# 判断当前hash中指定key是否存在
127.0.0.1:6379> hexists myhash k2
(integer) 1
127.0.0.1:6379> hexists myhash k1
(integer) 0
127.0.0.1:6379> hkeys myhash
1) "k2"
2) "k3"
127.0.0.1:6379> hvals myhash
1) "v2"
2) "v3"
127.0.0.1:6379> hset nyhash k5 0
(integer) 1
127.0.0.1:6379> hincrby myhash k5 3 # 设置增量,增量为负数,则等同于 decr
(integer) 3
127.0.0.1:6379> hincrby myhash k5 3
(integer) 6
127.0.0.1:6379> hincrby myhash k5 -1
(integer) 5
127.0.0.1:6379> hsetnx myhash k6 aaa #判断是否存在,不存在创建
(integer) 1
127.0.0.1:6379> hsetnx myhash k6 bbb #判断是否存在,存在创建失败
(integer) 0
hash更适合存储对象:
127.0.0.1:6379> hset user:1 name zhangsan age 15 gender nan email 858555@qq.com
(integer) 4
127.0.0.1:6379> hgetall user:1
1) "name"
2) "zhangsan"
3) "age"
4) "15"
5) "gender"
6) "nan"
7) "email"
8) "858555@qq.com"
5.5 Zset (有序集合)
- zadd 添加元素
- zrange 查看元素,默认从小到大
- zrangebyscore 根据当前Zset的key显示元素
- zrevrange 查看元素,从大到小排序
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> zadd k 100 xx #添加元素
(integer) 1
127.0.0.1:6379> zadd k 101 xx1
(integer) 1
127.0.0.1:6379> zadd k 200 xx2
(integer) 1
127.0.0.1:6379> zrange k 0 -1 #查看全部元素
1) "xx"
2) "xx1"
4) "xx2"
127.0.0.1:6379> zrangebyscore k -inf +inf #查看全部元素,根据当前Zset的key从小到大排序
1) "xx"
2) "xx1"
3) "xx2"
127.0.0.1:6379> zadd k 159 xx3
(integer) 1
127.0.0.1:6379> zrangebyscore k -inf +inf
1) "xx"
2) "xx1"
3) "xx3"
4) "xx2"
#查看全部元素,从小到大排序,并加上当前Zset的key
127.0.0.1:6379> zrangebyscore k -inf +inf withscores
1) "xx"
2) "100"
3) "xx1"
4) "101"
5) "xx3"
6) "159"
7) "xx2"
8) "200"
#查看当前Zset的key小于159的全部元素,从小到大排序,并加上当前Zset的key
127.0.0.1:6379> zrangebyscore k -inf 159 withscores
1) "xx"
2) "100"
3) "xx1"
4) "101"
5) "xx3"
6) "159"
127.0.0.1:6379> zrange k 0 -1
1) "xx1"
2) "xx3"
3) "xx2"
127.0.0.1:6379> zrevrange k 0 -1 #从大到小排序
1) "xx2"
2) "xx3"
3) "xx1"
- zrem 删除当前Zset的指定的值
- zcard 当前Zset中元素的个数
- zcount 获取当前Zset的key在某个区间内的个数
127.0.0.1:6379> zrange k 0 -1
1) "xx"
2) "xx1"
3) "xx3"
4) "xx2"
127.0.0.1:6379> zrem k xx #删除当前Zset的指定的值
(integer) 1
127.0.0.1:6379> zrange k 0 -1
1) "xx1"
2) "xx3"
3) "xx2"
127.0.0.1:6379> zcard k #当前Zset中元素的个数
(integer) 3
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> zadd k 1 aa 2 bb 3 cc 4 dd
(integer) 4
# 获取当前Zset的key在某个区间内的个数
127.0.0.1:6379> zcount k 1 3
(integer) 3
127.0.0.1:6379> zcount k 1 2
(integer) 2
127.0.0.1:6379> zcount k 1 4
(integer) 4