Redis常用五大数据类型

详细命令集,请点击此处

1.String(字符串)

  • string是redis最基本的类型,一个key对应一个value
  • string类型是二进制安全的,意思是redis的string可以包含任何数据,如jpg图片或者序列化的对象。
  • string类型是redis最基本的数据类型,一个redis中字符串value最大允许512m
常见指令
1 set/get/del/append/strlen
  • set:设置键值
  • get:由键得到值
  • del:删除键值
  • append:为对应键的值后面添加数据
  • strlen:由键得到值的长度
127.0.0.1:6379> set k1 k1
OK
127.0.0.1:6379> get k1
"k1"
127.0.0.1:6379> get k1
"k1"
127.0.0.1:6379> key *
(error) ERR unknown command 'key'
127.0.0.1:6379> KEYS *
1) "k1"
127.0.0.1:6379> del k1
(integer) 1
127.0.0.1:6379> KEYS *
(empty list or set)
127.0.0.1:6379> set k1 123
OK
127.0.0.1:6379> append k1 456
(integer) 6
127.0.0.1:6379> get k1
"123456"
127.0.0.1:6379> strlen k1
(integer) 6
2 incr/decr/incrby/decrby
  • incr:值加一
  • decr:值减一
  • incrby:值增加指定大小
  • decrby:值减少指定大小
127.0.0.1:6379> set k2 1
OK
127.0.0.1:6379> INCR k2
(integer) 2
127.0.0.1:6379> INCR k2
(integer) 3
127.0.0.1:6379> INCR k2
(integer) 4
127.0.0.1:6379> DECR k2
(integer) 3
127.0.0.1:6379> DECR k2
(integer) 2
127.0.0.1:6379> DECR k2
(integer) 1
127.0.0.1:6379> INCRBY k2 3
(integer) 4
127.0.0.1:6379> INCRBY k2 3
(integer) 7
127.0.0.1:6379> INCRBY k2 3
(integer) 10
127.0.0.1:6379> INCRBY k2 3
(integer) 13
127.0.0.1:6379> DECRBY k2 2
(integer) 11
127.0.0.1:6379> DECRBY k2 2
(integer) 9
127.0.0.1:6379> DECRBY k2 2
(integer) 7
3 getrange/setrange
  • getrange:由键得到指定范围内的值
  • setrange:从指定开始,覆盖设置值
127.0.0.1:6379> set k3 123456789
OK
127.0.0.1:6379> get k3
"123456789"
127.0.0.1:6379> GETRANGE k3 0 -1
"123456789"
127.0.0.1:6379> GETRANGE k3 0 5
"123456"
127.0.0.1:6379> GETRANGE k3 3 7
"45678"
127.0.0.1:6379> set k3 0 xxx
(error) ERR syntax error
127.0.0.1:6379> SETRANGE k3 0 xxx
(integer) 9
127.0.0.1:6379> get k3
"xxx456789"
4 setex(set with expire)/setnx(set if not exist)
  • setex:设置键值,并指定存活时间
  • setnx:提供键存在返回0,并不设置键值;若键不存在返回1,并设置键值
127.0.0.1:6379> SETEX k4 10 v4
OK
127.0.0.1:6379> get k4
"v4"
127.0.0.1:6379> ttl k4
(integer) 0
127.0.0.1:6379> ttl k4
(integer) -2
127.0.0.1:6379> get 4k
(nil)
127.0.0.1:6379> get k4
(nil)
127.0.0.1:6379> setnx k3 v33
(integer) 0
127.0.0.1:6379> get k3
"xxx456789"
127.0.0.1:6379> SETNX k5 v5
(integer) 1
127.0.0.1:6379> get k5
"v5"
5 mset/mget/msetnx
  • mset:成批设置键值
  • mget:成批获得值
  • msetnx:成批查重设置键值
127.0.0.1:6379> mset kk1 vv1 kk2 vv2 kk3 vv3
OK
127.0.0.1:6379> mget kk1 kk2 kk3
1) "vv1"
2) "vv2"
3) "vv3"
127.0.0.1:6379> MSETNX kk1 vvv1 kk2 vvv2
(integer) 0
127.0.0.1:6379> MSETNX kk1 vvv1 kk4 vv4
(integer) 0
127.0.0.1:6379> MSETNX kk4 vv4 kk5 vv5
(integer) 1
6 getset
  • getset:先get再set,返回原来的值,没有返回nil,并覆盖设置新的值
127.0.0.1:6379> getset k6 v6
(nil)
127.0.0.1:6379> get k7
(nil)
127.0.0.1:6379> getset k7 v7
(nil)
127.0.0.1:6379> get k7
"v7"
127.0.0.1:6379> getset k7 v77
"v7"
127.0.0.1:6379> get k7
"v77"

2.Hash(哈希,类似java里的map)

  • redis hash是一个键值对集合
  • redis hash是一个string类型的field和value的映射表,hash特别适合用于储存对象。
  • 类似java里面的map<String,Object>
常用指令
1 hset/hget/hmset/hmget/hgetall/hdel

hset key key1 value:设置一个Hash,是一个键值对,键为key;值又是一个键值对,键为key1,值为value
hget key key1:获得一个值。
hmset key key1 value1 key2 value2:设置一个Hash,键值对的键为key;值为多个键值对,键为key*,值为value*。
hmget:由主键与多个二级主键获得多个值。
hgetall:由主键获得所有的二级主键与对应的值。
hdel key:删除一个二级键值对。

127.0.0.1:6379> hset user id 11
(integer) 1
127.0.0.1:6379> hget user id
"11"
127.0.0.1:6379> hset user name lolo
(integer) 1
127.0.0.1:6379> hget user name
"lolo"
127.0.0.1:6379> hmset customer id 11 name linda age 12
OK
127.0.0.1:6379> hmget customer id name age
1) "11"
2) "linda"
3) "12"
127.0.0.1:6379> HGETALL customer
1) "id"
2) "11"
3) "name"
4) "linda"
5) "age"
6) "12"
127.0.0.1:6379> HDEL customer age
(integer) 1
127.0.0.1:6379> HGETALL customer
1) "id"
2) "11"
3) "name"
4) "linda"
2 hlen key 由主键获得二级键值对的个数
127.0.0.1:6379> HGETALL customer
1) "id"
2) "11"
3) "name"
4) "linda"
127.0.0.1:6379> hlen customer
(integer) 2
3 hexists key 检测是否存在主键为key的hash
127.0.0.1:6379> HGETALL customer
1) "id"
2) "11"
3) "name"
4) "linda"
127.0.0.1:6379> HEXISTS customer id
(integer) 1
127.0.0.1:6379> HEXISTS customer ids
(integer) 0
4 hkeys/hvals
  • hkeys key:由主键获得二级键值对的所有键。
  • hvals key:由主键获得二级键值对的所有值。
127.0.0.1:6379> HGETALL customer
1) "id"
2) "11"
3) "name"
4) "linda"
127.0.0.1:6379> HEXISTS customer id
(integer) 1
127.0.0.1:6379> HEXISTS customer ids
(integer) 0
5 hincrby/hincrbyfloat
  • hincrby key key1 value:主键加二级主键对应的值加value
  • hincrbyfloat key key1 value:主键加二级主键对应的值加value(可以是小数)
127.0.0.1:6379> HGETALL customer
1) "id"
2) "11"
3) "name"
4) "linda"
5) "age"
6) "3"
127.0.0.1:6379> HINCRBY customer age 3
(integer) 6
127.0.0.1:6379> 
127.0.0.1:6379> HINCRBY customer age 3
(integer) 9
127.0.0.1:6379> 
127.0.0.1:6379> HINCRBY customer age 3
(integer) 12
127.0.0.1:6379> HINCRBYFLOAT customer age 2.5
"14.5"
127.0.0.1:6379> HINCRBYFLOAT customer age 2.5
"17"
127.0.0.1:6379> HINCRBYFLOAT customer age 2.5
"19.5"
6 hsetnx key key1 value:在key主键的值中增添一个新的键值对<key1,value>若二级主键key1已经存在,不会设置上去,不存在就设置上去
127.0.0.1:6379> HGETALL customer
1) "id"
2) "11"
3) "name"
4) "linda"
5) "age"
6) "19.5"
127.0.0.1:6379> HSETNX customer age 11
(integer) 0
127.0.0.1:6379> HSETNX customer email 111@yyyu.com
(integer) 1
127.0.0.1:6379> HGETALL customer
1) "id"
2) "11"
3) "name"
4) "linda"
5) "age"
6) "19.5"
7) "email"
8) "111@yyyu.com"

3.List(列表)

  • redis列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素列表的头部(左边)或者尾部(右边)。它的底层实际是个链表。
常见指令
1 lpush/rpush/lrange
  • lpush:后面的数从左到右依次压栈。
  • rpush:后面的数从右到左依次压栈。
  • lrange:从栈顶到栈底依次遍历。
127.0.0.1:6379> LPUSH list1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> LRANGE list1 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> RPUSH list2 1 2 3 4 5 
(integer) 5
127.0.0.1:6379> LRANGE list2 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
2 lpop/rpop
  • lpop:从栈顶出一个数
  • rpop:从栈底出一个数
127.0.0.1:6379> LPOP list1
"5"
127.0.0.1:6379> lpop list2
"1"
127.0.0.1:6379> LRANGE list1 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
127.0.0.1:6379> LRANGE list2 0 -1
1) "2"
2) "3"
3) "4"
4) "5"
127.0.0.1:6379> RPOP list1
"1"
127.0.0.1:6379> RPOP list2
"5"
127.0.0.1:6379> LRANGE list 0 -1
(empty list or set)
127.0.0.1:6379> LRANGE list1 0 -1
1) "4"
2) "3"
3) "2"
127.0.0.1:6379> LRANGE list2 0 -1
1) "2"
2) "3"
3) "4"
3 lindex 按照索引取数据,索引从0开始
127.0.0.1:6379> LRANGE list1 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
127.0.0.1:6379> LINDEX list1 3
(nil)
127.0.0.1:6379> LINDEX list1 2
"2"
4 llen 获取list的长度
127.0.0.1:6379> LRANGE list1 0 -1
1) "4"
2) "3"
3) "2"
127.0.0.1:6379> LLEN list1
(integer) 3
5 lrem key n m,删除key中n个m
127.0.0.1:6379> LPUSH list3 1 1 1 2 2 2 3 3 3 4 4 4 5 6 6 7
(integer) 16
127.0.0.1:6379> LREM list3 2 4
(integer) 2
127.0.0.1:6379> LRANGE list3 0 -1
 1) "7"
 2) "6"
 3) "6"
 4) "5"
 5) "4"
 6) "3"
 7) "3"
 8) "3"
 9) "2"
10) "2"
11) "2"
12) "1"
13) "1"
14) "1"
6 itrim key n m,截取key索引从n到m,并保存到key中
127.0.0.1:6379> RPUSH list4 1 2 3 4 5 6 7 8 9 
(integer) 9
127.0.0.1:6379> LTRIM list4 0 5
OK
127.0.0.1:6379> LRANGE list4 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
127.0.0.1:6379> LTRIM list4 2 4
OK
127.0.0.1:6379> LRANGE list4 0 -1
1) "3"
2) "4"
7 rpoplpush key1 key2,将key栈底的数取出压栈到key2中
127.0.0.1:6379> LRANGE list1 0 -1
1) "4"
2) "3"
3) "2"
127.0.0.1:6379> LRANGE list2 0 -1
1) "2"
2) "3"
3) "4"
127.0.0.1:6379> RPOPLPUSH list1 list2
"2"
127.0.0.1:6379> LRANGE list1 0 -1
1) "4"
2) "3"
127.0.0.1:6379> LRANGE list2 0 -1
1) "2"
2) "2"
3) "3"
4) "4"
8 lset key index value,将key中索引的第index个替换成value
127.0.0.1:6379> LRANGE list2 0 -1
1) "2"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> LSET list2 2 10
OK
127.0.0.1:6379> LRANGE list2 0 -1
1) "2"
2) "2"
3) "10"
4) "4"
9 linsert key before/after value1 value2,在value1的前/后插入value2
127.0.0.1:6379> LINSERT list2 before 10 java
(integer) 5
127.0.0.1:6379> LINSERT list2 after 10 c++
(integer) 6
127.0.0.1:6379> LRANGE list2 0 -1
1) "2"
2) "2"
3) "java"
4) "10"
5) "c++"
6) "4"

4.Set(集合)

  • redis的set是string类型的无序集合,它是通过HashTable实现的
常见指令
1 sadd/smembers/sismember/del
  • sadd:新建一个set,重复的数据默认只添加一次
  • smembers:查看集合的数据
  • sismember:查看某个元素是否在集合中
  • del:删除一个集合
27.0.0.1:6379> SADD set 1 1 2 2 3 3 
(integer) 3
127.0.0.1:6379> SMEMBERS set
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SISMEMBER 1
127.0.0.1:6379> SISMEMBER set 1
(integer) 1
127.0.0.1:6379> SISMEMBER set 4
(integer) 0
127.0.0.1:6379> del set
(integer) 1
2 scard 获得集合的元素的个数
127.0.0.1:6379> SCARD set
(integer) 3
3 srem key value 删除集合key中的元素value
127.0.0.1:6379> SMEMBERS set
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> srem set 2
(integer) 1
127.0.0.1:6379> SMEMBERS set
1) "1"
2) "3"
4 srandmember key value 从集合key中随机出value个元素,不写value默认出一个
127.0.0.1:6379> SADD set1 1 2 3 4 5 6 7 8 9
(integer) 9
127.0.0.1:6379> SRANDMEMBER set1
"9"
127.0.0.1:6379> SRANDMEMBER set1 5
1) "6"
2) "8"
3) "5"
4) "3"
5) "2"
5 spop key value 从集合key中随机出栈value个元素,不写value默认出栈一个
127.0.0.1:6379> SMEMBERS set1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
127.0.0.1:6379> SPOP set1 4
1) "9"
2) "1"
3) "4"
4) "7"
127.0.0.1:6379> 
127.0.0.1:6379> SPOP set1 
"8"
6 smove set1 set2 value 将set1中的元素value移动到set2中
127.0.0.1:6379> SADD set2 1 2 3
(integer) 3
127.0.0.1:6379> SADD set3 x y z
(integer) 3
127.0.0.1:6379> SMOVE set2 set3 2
(integer) 1
127.0.0.1:6379> SMEMBERS set2
1) "1"
2) "3"
127.0.0.1:6379> SMEMBERS set3
1) "y"
2) "x"
3) "2"
4) "z"
7 sdiff/sinter/sunion
  • sdiff set1 set2:差集,取set1中有set2中没有的元素
  • sinter set1 set2:两集合的交集
  • sunion set1 set2:两集合的并集
127.0.0.1:6379> SADD set1 1 2 3 4 5 6
(integer) 6
127.0.0.1:6379> SADD set2 2 5 6 u t i
(integer) 6
127.0.0.1:6379> SDIFF set1 set2
1) "1"
2) "3"
3) "4"
127.0.0.1:6379> SDIFF set2 set1
1) "t"
2) "i"
3) "u"
127.0.0.1:6379> SINTER set1 set2
1) "2"
2) "5"
3) "6"
127.0.0.1:6379> SUNION set1 set2
1) "5"
2) "4"
3) "1"
4) "t"
5) "3"
6) "6"
7) "2"
8) "u"
9) "i"

5.Zset(sorted set:有序集合)

  • redis zset和set一样也是string类型元素的集合,且不允许重复的成员
  • 不同的是每个元素都会关联一个double类型的分数
  • redis正是通过分数来为集合中的成员进行从小到大的排序,zset的成员是唯一的,但分数却可以重复。
常见指令
1 zadd/zrange/zrevrange
  • zadd key score1 value1 score2 value2:添加一组zset。
  • zrange key:获得set的值情况,如果带后缀withscores,会连值和分数一起打印。
  • zrevrange key:逆序获得set的值情况,如果带后缀withscores,会连值和分数一起打印。
127.0.0.1:6379> ZADD zset1 50 v1 60 v2 70 v3 80 v4 90 v5
(integer) 5
127.0.0.1:6379> ZRANGE zset1 0 -1
1) "v1"
2) "v2"
3) "v3"
4) "v4"
5) "v5"
127.0.0.1:6379> ZRANGE zset1 0 -1 withscores
 1) "v1"
 2) "50"
 3) "v2"
 4) "60"
 5) "v3"
 6) "70"
 7) "v4"
 8) "80"
 9) "v5"
10) "90"
127.0.0.1:6379> ZREVRANGE zset1 0 -1 withscores
 1) "v5"
 2) "90"
 3) "v4"
 4) "80"
 5) "v3"
 6) "70"
 7) "v2"
 8) "60"
 9) "v1"
10) "50"
2 zrangebyscore/zrevrangebyscore
  • zrangebyscore key score1 score2(score1<score2) :查找分数在score1-score2之间的所有值
  • zrevrangebyscore key score1 score2(score1>score2) :倒叙查找分数在score1-score2之间的所有值
  • 注:在score前加(表示这个分数范围内不包含score这个值
  • 注:limit value1 value2表示查出的数据从下标value1开始打印value2个
127.0.0.1:6379> ZRANGE zset1 0 -1 withscores
 1) "v1"
 2) "50"
 3) "v2"
 4) "60"
 5) "v3"
 6) "70"
 7) "v4"
 8) "80"
 9) "v5"
10) "90"
127.0.0.1:6379> ZRANGEBYSCORE zset1 60 80
1) "v2"
2) "v3"
3) "v4"
127.0.0.1:6379> ZREVRANGEBYSCORE zset1 90 60
1) "v5"
2) "v4"
3) "v3"
4) "v2"
127.0.0.1:6379> ZRANGEBYSCORE zset1 60 (80
1) "v2"
2) "v3"
127.0.0.1:6379> ZRANGEBYSCORE zset1 (60 (80
1) "v3"
127.0.0.1:6379> ZRANGEBYSCORE zset1 60 80 limit 1 2
1) "v3"
2) "v4"
3 zrem key value:删除元素
127.0.0.1:6379> ZRANGE zset1 0 -1 withscores
 1) "v1"
 2) "50"
 3) "v2"
 4) "60"
 5) "v3"
 6) "70"
 7) "v4"
 8) "80"
 9) "v5"
10) "90"
127.0.0.1:6379> zrem zset1 v4
(integer) 1
127.0.0.1:6379> ZRANGE zset1 0 -1 withscores
1) "v1"
2) "50"
3) "v2"
4) "60"
5) "v3"
6) "70"
7) "v5"
8) "90"
4 zcard/zcount/zrank/zscore
  • zcard key:获得key有序集合的值个数。
  • zcount key score区间:获得key有序集合在score区间内的值个数。
  • zrank key value:获取key有序集合中value对应的下标。
  • zscore key value:获取key有序集合中value对应的分数。
127.0.0.1:6379> ZRANGE zset1 0 -1 withscores
1) "v1"
2) "50"
3) "v2"
4) "60"
5) "v3"
6) "70"
7) "v5"
8) "90"
127.0.0.1:6379> zcard zset1
(integer) 4
127.0.0.1:6379> ZCOUNT zset1 60 90
(integer) 3
127.0.0.1:6379> zrank zset1 v3
(integer) 2
127.0.0.1:6379> zscore zset1 v3
"70"

附:key(键)

常见指令
1.(keys 正则匹配)查找对应情况的键值。
127.0.0.1:6379> KEYS *
1) "k1"
2) "key:__rand_int__"
3) "counter:__rand_int__"
4) "myset:__rand_int__"
5) "mylist"
127.0.0.1:6379> set k2 hello
OK
127.0.0.1:6379> set k3 hello
OK
127.0.0.1:6379> KEYS k?
1) "k3"
2) "k1"
3) "k2"
2.(exists key)判断key这个件在库中是否存在,0表示不存在,1表示存在。
27.0.0.1:6379> set k1 k1
OK
127.0.0.1:6379> set k2 k2
OK
127.0.0.1:6379> KEYS *
1) "k1"
2) "k2"
127.0.0.1:6379> EXISTS k1
(integer) 1
127.0.0.1:6379> EXISTS k3
(integer) 0
3.(move key db数)将键从当前库移动到对应库中。
27.0.0.1:6379> move k2 2
(integer) 1
127.0.0.1:6379> EXISTS k2
(integer) 0
127.0.0.1:6379> SELECT 2
OK
127.0.0.1:6379[2]> EXISTS k2
(integer) 1
127.0.0.1:6379[2]> select 0
OK
127.0.0.1:6379> KEYS *
1) "k1"
4.(ttl key)查看键还有多少秒过期,-1表示永不过期,-2表示已过期。
5.(expire key 秒钟)为键设置过期时间
27.0.0.1:6379> TTL k1
(integer) -1
127.0.0.1:6379> EXPIRE k1 10
(integer) 1
127.0.0.1:6379> ttl k1
(integer) 6
127.0.0.1:6379> ttl k2
(integer) -2
127.0.0.1:6379> ttl k1
(integer) -2
127.0.0.1:6379> get k1
(nil)
127.0.0.1:6379> KEYS *
(empty list or set)
6.(type key)查看键是对应的值是什么类型
127.0.0.1:6379> set k3 k3
OK
127.0.0.1:6379> type k3
string
127.0.0.1:6379> LPUSH mylist 1 2 3 4 5
(integer) 5
127.0.0.1:6379> LRANGE mylist 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> TYPE mylist
list
附:对一个键重新赋值,原值会被覆盖
127.0.0.1:6379> set k4 k4
OK
127.0.0.1:6379> set k4 v4
OK
127.0.0.1:6379> get k4
"v4"
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值