Redis数据类型和常用命令

Redis相较于其它的数据库虽然简单,但是要熟记所有命令的用法也并非易事。一个简单的技巧是通过要操作的数据类型来将这些命令进行结构化。

数据类型和对应命令

所有存储于redis中的数据都对应于一个键值对(key-value pair), key可以是任意二进制序列,通常我们使用字符串来标记一个特定的key。在redis中我们通常称这个key为name或者就叫key, 而对于value,redis支持如下几种类型:

  • strings
  • lists: list内容只能是string
  • sets: set中存储非重复的string
  • sorted sets: 与sets类似,但是每个string都会对应一个float类型的score,从而用于排序
  • hashes: 键值对hash类型,也就是Python中的dict,注意在redis中最外层的key一般叫做name或者key,而value中数据类型如果是dict,那么这个dict中的key通常被称为field。
  • Bit arrays (or simply bitmaps): 实际存储的仍然是string,但是可以针对bit进行操作
  • HyperLogLogs: 用于估计unique value的数量

针对不同的数据类型,会有不同的命令,通过如下脑图可以更加清晰地记忆redis的命令


 
Redis数据类型与常用命令

strings

127.0.0.1:6379> set strtest xyz OK 127.0.0.1:6379> get strtest "xyz" 127.0.0.1:6379> mset a 1 b 2 c 3 OK 127.0.0.1:6379> mget a b c 1) "1" 2) "2" 3) "3" # 注意以下增减操作只能针对整数数字(虽然类型仍然是string类型) 127.0.0.1:6379> incr a (integer) 2 127.0.0.1:6379> incrby b 5 (integer) 7 127.0.0.1:6379> decr b (integer) 6 127.0.0.1:6379> decrby b 3 (integer) 3 

lists

lists类型中存储的仍然是string类型

# left push用于从左将item压入到list当中
127.0.0.1:6379> lpush list_test 1 2 3 (integer) 3 # 注意如果想看list中的内容,无法通过get直接去看,get只是针对string,而必须使用lrange 127.0.0.1:6379> get list_test (error) WRONGTYPE Operation against a key holding the wrong kind of value # 这里0 -1均为list index,表示从index 0 开始到-1结束,-1即从右数最后一个item 127.0.0.1:6379> lrange list_test 0 -1 1) "3" 2) "2" 3) "1" 127.0.0.1:6379> rpush list_test 5 7 (integer) 5 127.0.0.1:6379> lrange list_test 0 -1 1) "3" 2) "2" 3) "1" 4) "5" 5) "7" 127.0.0.1:6379> lpop list_test "3" 127.0.0.1:6379> lrange list_test 0 -1 1) "2" 2) "1" 3) "5" 4) "7" # 从左trim截断list,以下是截取index 0 到index 2 的item作为新的list 127.0.0.1:6379> ltrim list_test 0 2 OK 127.0.0.1:6379> lrange list_test 0 -1 1) "2" 2) "1" 3) "5" 

hashes (dict)

哈希类型,在python中也就是dict类型。这也是非常常用的数据类型。

127.0.0.1:6379> hset htest a 1
(integer) 1
127.0.0.1:6379> hget htest a
"1" 127.0.0.1:6379> hmset htest a 1 b 2 c 3 OK 127.0.0.1:6379> hmget htest a b c 1) "1" 2) "2" 3) "3" 127.0.0.1:6379> hgetall htest 1) "a" 2) "1" 3) "b" 4) "2" 5) "c" 6) "3" 127.0.0.1:6379> hkeys htest 1) "a" 2) "b" 3) "c" 127.0.0.1:6379> hvals htest 1) "1" 2) "2" 3) "3" 

在python程序中使用redis-py driver的时候,通过dict进行操作会非常清晰和简单。

In [1]: import redis

In [2]: r = redis.StrictRedis(host='localhost', port=6379, db=0) In [3]: d = {"a": 2, "b": 3} In [4]: key = "test:2" In [5]: r.hmset(key, d) Out[5]: True In [6]: r.hgetall(key) Out[6]: {'a': '2', 'b': '3'} 

sets

127.0.0.1:6379> sadd set_test a b 33
(integer) 3
127.0.0.1:6379> sadd set_test c a b 22 (integer) 1 # 可以看到不会有重复的item 127.0.0.1:6379> smembers set_test 1) "c" 2) "33" 3) "a" 4) "b" # 用于测试set中是否包含指定的item,如有则返回1,没有返回0 127.0.0.1:6379> sismember set_test a (integer) 1 127.0.0.1:6379> sismember set_test xx (integer) 0 127.0.0.1:6379> sadd set_test2 a b 56 66 (integer) 4 127.0.0.1:6379> smembers set_test2 1) "56" 2) "a" 3) "66" 4) "b" # 求交集 127.0.0.1:6379> sinter set_test set_test2 1) "a" 2) "b" # 求并集 127.0.0.1:6379> sunion set_test set_test2 1) "33" 2) "a" 3) "56" 4) "c" 5) "66" 6) "22" 7) "b" 

sorted sets

sorted sets与sets类似,可以保证item不重复,区别在于sorted sets中每个item对应一个float类型的score

127.0.0.1:6379> zadd sort_set 2.2 a (integer) 1 127.0.0.1:6379> zadd sort_set 2 bb (integer) 1 127.0.0.1:6379> zadd sort_set 10 x (integer) 1 # 获取index 从0 到-1的(即所有) items 127.0.0.1:6379> zrange sort_set 0 -1 1) "bb" 2) "a" 3) "x" # 获取item bb对应的index 127.0.0.1:6379> zrank sort_set bb (integer) 0 127.0.0.1:6379> zrank sort_set x (integer) 2 127.0.0.1:6379> zscore sort_set x "10" # 用于获取对应score set中item的数量 127.0.0.1:6379> zcard sort_set (integer) 3 

bit arrays

用于针对指定的key设置位数据为0 或 1。当我们对存储有较高要求,且对于统计为1的item的数量时,使用bit array是一个好的办法。

# 针对bit 7进行设置,设置为1,返回该位之前存储的值
127.0.0.1:6379> setbit bit_test 7 1 (integer) 0 127.0.0.1:6379> setbit bit_test 7 0 (integer) 1 127.0.0.1:6379> get bit_test "\x00" 127.0.0.1:6379> setbit bit_test 8 1 (integer) 0 127.0.0.1:6379> setbit bit_test 9 1 (integer) 0 # 统计有多少位为1 127.0.0.1:6379> bitcount bit_test (integer) 2 

HyperLogLogs

redis实现了相应算法可以估计hyperloglog中存储的所有item中非重复的item的数量

127.0.0.1:6379> pfadd loglog 1 3 5 7 1 (integer) 1 127.0.0.1:6379> pfcount loglog (integer) 4 

通用的命令

  • keys pattern: pattern可以为glob风格的通配符格式,最常用的是keys *查询所有的keys
  • exists key: 查询该key是否存在
  • del key: 删除该key对应的数据
  • type key: 查询该key对应的value的数据类型
  • expire key: 定义多长时间后key对应的数据过期,过期后数据会被自动删除
  • ttl key: 查询该key对应的剩余存活时间
  • flushdb/flushall: flushdb用于清除当前db的所有数据,flushall清除所有数据库的数据

References



作者:geekpy
链接:https://www.jianshu.com/p/cd434a19c822
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

猜你喜欢

转载自www.cnblogs.com/cheyunhua/p/9541857.html
今日推荐