redis五大数据类型的使用详解

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

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值