Redis 的学习和使用
安装Redis
官方网站:http://redis.io/
官方下载:http://redis.io/download 可以根据需要下载不同版本
windows版:https://github.com/mythz/redis-windows
https://github.com/ServiceStack/redis-windows/raw/master/downloads/redis-latest.zip
phpstudy安装redis扩展
# 教程
http://blog.csdn.net/tianjingang1/article/details/68491369
# php_redis.dll资源
http://windows.php.net/downloads/pecl/releases/redis/2.2.7/
# php_igbinary.dll 资源
http://pecl.php.net/package/igbinary
window版本:
下载完成之后,在目录中找到 redis-server.exe 和 redis-cli.exe
必须先打开前者,再打开后者,如下图所示:
相关的Redis配置可在 redis.windows.conf 中配置
String类:
# 插入数据 redis 127.0.0.1:6379> set name wwl # 查询数据 redis 127.0.0.1:6379> get name "wwl" # 删除键值 redis 127.0.0.1:6379> del name # 验证键是否存在:其中 0,代表此 key 不存在;1 代表存在 redis 127.0.0.1:6379> exists name # => (integer) 0
setnx: 如果 key 已经存在, 那么不进行set操作并且返回0, nx 是 not exist 的意思
set name Lee setnx name Lee123 get name # => Lee
setex:设定有效期
setex name 10 red # => 10秒之后name为red,过了十秒自动过期删除
setrange: 替换值
set name 928532756@qq.com setrange name 10 2980.com get name # => "928532756@2980.com"
mset:一次设置多个 key 的值,成功返回 ok 表示所有的值都设置了,失败返回 0 表示没有任何值被设置。
mset key1 HongWan1 key2 HongWan2 # => OK get key1 # => "HongWan1" get key2 # => "HongWan2"
msetnx:一次设置多个 key 的值,成功返回 ok 表示所有的值都设置了,失败返回 0 表示没有任何值被设置,但是不会覆盖已经存在的 key。如果这条命令返回 0,那么里面操作都会回滚,都不会被执行。
msetnx key2 HongWan2_new key3 HongWan3 # => (integer) 0 get key2 # => "HongWan2" get key3 # => (nil) # 可以看出如果这条命令返回 0,那么里面操作都会回滚,都不会被执行。
getset: 设置 key 的值,并返回 key 的旧值。如果 key 不存在,那么将返回 nil
127.0.0.1:6379> set name Lee OK 127.0.0.1:6379> getset name Mp "Lee"
getrange: 字符串截取
redis 127.0.0.1:6379> get name # => "HongWan@126.com"
redis 127.0.0.1:6379> getrange name 0 6 # => "HongWan"
redis 127.0.0.1:6379> getrange name -7 -1 # => "126.com"
redis 127.0.0.1:6379> getrange name 7 100 # => "@126.com"
mget: 一次获取多个key,如果不存在则返回nil
127.0.0.1:6379> mget a b c d # 1) "1" # 2) "2" # 3) "3" # 4) (nil)
incr: 对 key 的值做加加(i++)操作,并返回新的值。注意 incr 一个不是 int 的 value 会返回错误,incr 一个不存在的 key,则设置 key 为 1
decr : 同上,对key的值做减减操作。
redis 127.0.0.1:6379> set age 20 # =>OK
redis 127.0.0.1:6379> incr age # =>(integer) 21
redis 127.0.0.1:6379> get age # =>"21"
incrby: 同 incr 类似,加指定值 ,key 不存在时候会设置 key,并认为原来的 value 是 0
decrby: 同上,减去指定的值
redis 127.0.0.1:6379> get age # => "21" redis 127.0.0.1:6379> incrby age 5 # => (integer) 26 redis 127.0.0.1:6379> get age # => "26"
append:给指定 key 的字符串值追加 value,返回新字符串值的长度。
127.0.0.1:6379> set name 928532756 # => OK 127.0.0.1:6379> append name @qq.com # => (integer) 16 127.0.0.1:6379> get name # => "928532756@qq.com"
strlen: 获取指定值的长度
127.0.0.1:6379> strlen name # => (integer) 16
Hash 类型及操作:
hset / hget:设置 / 获取指定hash field 的值,如果 key 不存在,则先创建。
127.0.0.1:6379> hset myhash field1 hello # => (integer) 1 127.0.0.1:6379> hset myhash field2 world # => (integer) 1 127.0.0.1:6379> hget myhash field1 # => "hello" 127.0.0.1:6379> hget myhash field1 # => "hello" 127.0.0.1:6379> hget myhash field2 # => "world"
hsetnx:设置 hash field 为指定值,如果 key 不存在,则先创建。如果 field 已经存在,返回 0,nx 是not exist 的意思。
redis 127.0.0.1:6379> hsetnx myhash field "Hello" # => (integer) 1 redis 127.0.0.1:6379> hsetnx myhash field "Hello" # => (integer) 0 第一次执行是成功的,但第二次执行相同的命令失败,原因是 field 已经存在了。
hmset / hmget: 同时设置/获取 hash 的多个 field。
127.0.0.1:6379> del myhash # => (integer) 1 127.0.0.1:6379> hmset myhash field1 Hello field2 World # => OK 127.0.0.1:6379> hmget myhash fiele1 field2 field3 # => 1) "Hello" # => 2) "World" # => 3) (nil) 由于数据库没有 field3,所以取到的是一个空值 nil
hexists: 测试指定的field是否存在
127.0.0.1:6379> hexists myhash field1 # => (integer) 1
hincrby:指定的 hash filed 加上给定值。可以为负数
127.0.0.1:6379> hset myhash field3 20 # (integer) 1 127.0.0.1:6379> hincrby myhash field3 -8 # (integer) 12
hlen:返回指定 hash 的 field 数量。
127.0.0.1:6379> hlen myhash # (integer) 3
hdel: 删除指定hash的列, 如果要删除hash表本身,直接使用del
127.0.0.1:6379> hdel myhash field3 # (integer) 1
hkeys: 返回hash所有的列
127.0.0.1:6379> hkeys myhash # 1) "field1" # 2) "field2"
hvals: 返回hash所有的值
127.0.0.1:6379> hvals myhash # 1) "Hello" # 2) "World"
hgetall: 返货hash所有的键值
127.0.0.1:6379> hgetall myhash # 1) "field1" # 2) "Hello" # 3) "field2" # 4) "World"
lists 类型及操作 :
lpush : 在 key 对应 list 的头部添加字符串元素
lrange: 是用于取 mylist 的内容。
127.0.0.1:6379> lpush mylist "world" # (integer) 1 127.0.0.1:6379> lpush mylist "hello" # (integer) 2 127.0.0.1:6379> lrange mylist 0 -1 # 1) "hello" # 2) "world"
rpush: 在 key 对应 list 的尾部添加字符串元素
127.0.0.1:6379> rpush mylist3 "hello" # (integer) 1 127.0.0.1:6379> rpush mylist3 "world" # (integer) 2 127.0.0.1:6379> lrange mylist3 0 -1 # 1) "hello" # 2) "world"
linsert: 在 key 对应 list 的特定位置之前或之后添加字符串元素
127.0.0.1:6379> linsert mylist3 before "world" "there" # (integer) 3 127.0.0.1:6379> lrange mylist3 0 -1 # 1) "hello" # 2) "there" # 3) "world"
lset: 替换 list 中指定索引的值
127.0.0.1:6379> rpush mylist4 "one" # (integer) 1 127.0.0.1:6379> rpush mylist4 "two" # (integer) 2 127.0.0.1:6379> rpush mylist4 "there" # (integer) 3 127.0.0.1:6379> lset mylist4 0 "four" # OK 127.0.0.1:6379> lset mylist4 2 "five" # OK 127.0.0.1:6379> lrange mylist4 0 -1 # 1) "four" # 2) "two" # 3) "five"
lrem: 从 key 对应 list 中删除 count 个和 value 相同的元素。count>0 时,按从头到尾的顺序删除,具体如下:
127.0.0.1:6379> rpush mylist5 "hello" # (integer) 1 127.0.0.1:6379> rpush mylist5 "hello" # (integer) 2 127.0.0.1:6379> rpush mylist5 "foo" # (integer) 3 127.0.0.1:6379> rpush mylist5 "hello" # (integer) 4 127.0.0.1:6379> lrem mylist5 2 "hello" # (integer) 2 127.0.0.1:6379> lrange mylist5 0 -1 # 1) "foo" # 2) "hello"
count<0 时,按从尾到头的顺序删除,具体如下:
127.0.0.1:6379> rpush mylist6 "hello" # (integer) 1 127.0.0.1:6379> rpush mylist6 "hello" # (integer) 2 127.0.0.1:6379> rpush mylist6 "foo" # (integer) 3 127.0.0.1:6379> rpush mylist6 "hello" # (integer) 4 127.0.0.1:6379> lrem mylist6 -2 "hello" # (integer) 2 127.0.0.1:6379> lrange mylist6 0 -1 # 1) "hello" # 2) "foo"
count=0 时,删除全部,具体如下:
redis 127.0.0.1:6379> rpush mylist7 "hello" # (integer) 1 redis 127.0.0.1:6379> rpush mylist7 "hello" # (integer) 2 redis 127.0.0.1:6379> rpush mylist7 "foo" # (integer) 3 redis 127.0.0.1:6379> rpush mylist7 "hello" # (integer) 4 redis 127.0.0.1:6379> lrem mylist7 0 "hello" # (integer) 3 redis 127.0.0.1:6379> lrange mylist7 0 -1 # 1) "foo"
ltrim: 保留指定索引范围内的值
127.0.0.1:6379> rpush mylist8 "one" # (integer) 1 127.0.0.1:6379> rpush mylist8 "two" # (integer) 2 127.0.0.1:6379> rpush mylist8 "three" # (integer) 3 127.0.0.1:6379> rpush mylist8 "four" # (integer) 4 127.0.0.1:6379> ltrim mylist8 1 -1 # OK 127.0.0.1:6379> lrange mylist8 0 -1 # 1) "two" # 2) "three" # 3) "four"
lpop: 弹出头部元素并且移出List
rpop: 弹出尾部元素并且移出List
127.0.0.1:6379> lrange mylist 0 -1 # 1) "hello" # 2) "world" 127.0.0.1:6379> lpop mylist # "hello" 127.0.0.1:6379> lrange mylist 0 -1 # 1) "world"
rpoplpush: 从第一个 list 的尾部移除元素, 并添加到第二个 list 的头部,最后返回被移除的元素值,整个操作是原子的.如果第一个 list 是空或者不存在返回 nil
127.0.0.1:6379> lrange mylist5 0 -1 # 1) "foo" # 2) "hello" 127.0.0.1:6379> lrange mylist6 0 -1 # 1) "hello" # 2) "foo" 127.0.0.1:6379> rpoplpush mylist5 mylist6 # "hello" 127.0.0.1:6379> lrange mylist5 0 -1 # 1) "foo" 127.0.0.1:6379> lrange mylist6 0 -1 # 1) "hello" # 2) "hello" # 3) "foo"
lindex: 返回名称为 key 的 list 中 index 位置的元素
127.0.0.1:6379> lrange mylist2 0 -1 # 1) "hello" # 2) "wird" 127.0.0.1:6379> lindex mylist2 0 # "hello"
llen: 获取list的长度
127.0.0.1:6379> llen mylist2 # (integer) 2
sets 类型及操作:
sadd: 向名称为 key 的 set 中添加元素
smembers: 查看 myset 中的所有元素
127.0.0.1:6379> sadd myset "hello" # (integer) 1 127.0.0.1:6379> sadd myset "world" # (integer) 1 127.0.0.1:6379> sadd myset "world" # (integer) 0 由于第三个元素跟第二个元素是相同的,所以第三个元素没有添加成功 127.0.0.1:6379> smembers myset # 1) "world" # 2) "hello"
srem: 删除指定的值
127.0.0.1:6379> sadd myset2 "one" # (integer) 1 127.0.0.1:6379> sadd myset2 "two" # (integer) 1 127.0.0.1:6379> sadd myset2 "three" # (integer) 1 127.0.0.1:6379> srem myset2 "one" # (integer) 1 127.0.0.1:6379> srem myset2 "four" # (integer) 0 由于元素 中没有 four 所以,此条 srem 命令执行失败。 127.0.0.1:6379> smembers myset2 # 1) "three" # 2) "two"
spop: 【随机、随机、随机】弹出一个元素并从set中删除
127.0.0.1:6379> sadd myset3 "one" # (integer) 1 127.0.0.1:6379> sadd myset3 "two" # (integer) 1 127.0.0.1:6379> sadd myset3 "three" # (integer) 1 127.0.0.1:6379> spop myset3 # "two"
sdiff: 返回所有给定 key 与第一个 key 的差集
127.0.0.1:6379> smembers myset2 # 1) "three" # 2) "two" 127.0.0.1:6379> smembers myset3 # 1) "three" # 2) "one" 127.0.0.1:6379> sdiff myset2 myset3 # 1) "two"
sdiffstore: 对比两组set的差集,并且存入另一个set中
127.0.0.1:6379> smembers myset2 # 1) "three" # 2) "two" 127.0.0.1:6379> smembers myset3 # 1) "three" # 2) "one" 127.0.0.1:6379> sdiff myset2 myset3 # 1) "two" 127.0.0.1:6379> sdiffstore myset4 myset2 myset3 # (integer) 1 127.0.0.1:6379> smembers myset4 # 1) "two"
sinter: (核心功能)返回所有给定 key 的交集
127.0.0.1:6379> smembers myset2 # 1) "three" # 2) "two" 127.0.0.1:6379> smembers myset3 # 1) "three" # 2) "one" 127.0.0.1:6379> sinter myset2 myset3 # 1) "three"
sinterstore: 返回所有给定 key 的交集,并将结果存为另一个 key
127.0.0.1:6379> smembers myset2 # 1) "three" # 2) "two" 127.0.0.1:6379> smembers myset3 # 1) "three" # 2) "one" 127.0.0.1:6379> sinterstore myset4 myset2 myset3 # (integer) 1 127.0.0.1:6379> smembers myset4 # 1) "three"
sunion: 返回所有给定 key 的并集
127.0.0.1:6379> smembers myset2 # 1) "three" # 2) "two" 127.0.0.1:6379> smembers myset3 # 1) "three" # 2) "one" 127.0.0.1:6379> sunion myset2 myset3 # 1) "one" # 2) "two" # 3) "three"
sunionstore: 返回所有给定 key 的并集,并将结果存为另一个 key
127.0.0.1:6379> smembers myset2 # 1) "three" # 2) "two" 127.0.0.1:6379> smembers myset3 # 1) "three" # 2) "one" 127.0.0.1:6379> sunionstore myset4 myset2 myset3 # (integer) 3 127.0.0.1:6379> smembers myset4 # 1) "one" # 2) "two" # 3) "three"
smove:从第一个 key 对应的 set 中 移除 指定值 并添加到第二个对应 set 中
127.0.0.1:6379> smembers myset2 # 1) "three" # 2) "two" 127.0.0.1:6379> smove myset2 myset7 three # (integer) 1 127.0.0.1:6379> smembers myset7 # 1) "three" 127.0.0.1:6379> smembers myset2 # 1) "two"
scard: 返回指定set的长度
127.0.0.1:6379> scard myset2 # (integer) 1
sismember: 检测是否包含指定值
127.0.0.1:6379> smembers myset2 # 1) "two" 127.0.0.1:6379> sismember myset2 two # (integer) 1 127.0.0.1:6379> sismember myset2 one # (integer) 0
srandmember: 机返回名称为 key 的 set 的一个元素,但是不删除元素
127.0.0.1:6379> smembers myset2 # 1) "two" 127.0.0.1:6379> sismember myset2 two # (integer) 1 127.0.0.1:6379> sismember myset2 one # (integer) 0
sorted sets 类型及操作
zadd: 向名称为 key 的 zset 中添加元素 member,score 用于排序。如果该元素已经存在,则根据score 更新该元素的顺序
127.0.0.1:6379> zadd myzset 1 "one" # (integer) 1 127.0.0.1:6379> zadd myzset 2 "two" # (integer) 1 127.0.0.1:6379> zadd myzset 3 "two" # (integer) 0 127.0.0.1:6379> zrange myzset 0 -1 withscores # 1) "one" # 2) "1" # 3) "two" # 4) "3" two 被设置了 2 次,那么将以最后一次的设置为准
zrem: 删除名称为 key 的 zset 中的元素 member
127.0.0.1:6379> zrange myzset 0 -1 withscores # 1) "one" # 2) "1" # 3) "two" # 4) "3" 127.0.0.1:6379> zrem myzset two # (integer) 1 127.0.0.1:6379> zrange myzset 0 -1 withscores # 1) "one" # 2) "1"
# 可以看到 two 被删除了
zincrby: 本例中将 one 的 score 从 1 增加了 2,增加到了 3
127.0.0.1:6379> zadd myzset2 1 "one" # (integer) 1 127.0.0.1:6379> zadd myzset2 2 "two" # (integer) 1 127.0.0.1:6379> zincrby myzset2 2 "one" # "3" 127.0.0.1:6379> zrange myzset2 0 -1 withscores # 1) "two" # 2) "2" # 3) "one" # 4) "3"
zrank: 返回store(key)
127.0.0.1:6379> zrange myzset2 0 -1 withscores # 1) "two" # 2) "2" # 3) "one" # 4) "3" 127.0.0.1:6379> zrank myzset2 two # (integer) 0 127.0.0.1:6379> zrank myzset2 one # (integer) 1
zrevrank: 返回所在的排名
127.0.0.1:6379> zrange myzset3 0 -1 withscores 1) "one" 2) "1" 3) "two" 4) "2" 5) "three" 6) "3" 7) "four" 8) "4" 127.0.0.1:6379> zrevrank myzset3 two (integer) 2
zrevrange: (按 score 从大到小排序)中的 index 从 start 到 end 的所有元素
127.0.0.1:6379> zrevrange myzset3 0 -1 withscores # 1) "four" # 2) "4" # 3) "three" # 4) "3" # 5) "two" # 6) "2" # 7) "one" # 8) "1"
zrangebyscore: 返回指定区间的score
127.0.0.1:6379> zrangebyscore myzset3 2 3 withscores # 1) "two" # 2) "2" # 3) "three" # 4) "3"
zcount: 返回指定区间的数量
127.0.0.1:6379> zcount myzset3 2 3 # (integer) 2
zcard: 返回集合中元素个数
redis 127.0.0.1:6379> zcard myzset3 # (integer) 4
zscore:返回给定元素对应的 score(key)
127.0.0.1:6379> zrange myzset3 0 -1 withscores # 1) "one" # 2) "1" # 3) "two" # 4) "2" # 5) "three" # 6) "3" # 7) "four" # 8) "4" 127.0.0.1:6379> zscore myzset3 two # "2"
zremrangebyrank: 删除集合中 score 在给定区间的元素
127.0.0.1:6379> zrange myzset3 0 -1 withscores # 1) "one" # 2) "1" # 3) "two" # 4) "2" # 5) "three" # 6) "3" # 7) "four" # 8) "4" 127.0.0.1:6379> zremrangebyrank myzset3 3 3 (integer) 1 127.0.0.1:6379> zrange myzset3 0 -1 withscores # 1) "one" # 2) "1" # 3) "two" # 4) "2" # 5) "three" # 6) "3" 下标为3,既four被删除了
zremrangebyscore: 删除集合中 score 在给定区间的元素
127.0.0.1:6379> zrange myzset3 0 -1 withscores # 1) "one" # 2) "1" # 3) "two" # 4) "2" # 5) "three" # 6) "3" 127.0.0.1:6379> zremrangebyscore myzset3 1 2 # (integer) 2 127.0.0.1:6379> zrange myzset3 0 -1 withscores # 1) "three" # 2) "3"
Redis 常用命令
keys: 返回满足给定 pattern 的所有 key
127.0.0.1:6379> keys * # 1) "myset4" # 2) "myset7" # 3) "a" # 4) "myzset" # 5) "c" # 6) "mylist4" # 7) "myset2" # 8) "myset" # 9) "mylist2" # 10) "myzset2" # 11) "mylist5" # 12) "mylist3" # 13) "myset3" # 14) "myhash" # 15) "mylist" # 16) "mylist8" # 17) "myzset3" # 18) "b" # 19) "mylist6"
用表达式 mylist*,代表取出所有以 mylist 开头的 key
127.0.0.1:6379> keys mylist* # 1) "mylist4" # 2) "mylist2" # 3) "mylist5" # 4) "mylist3" # 5) "mylist" # 6) "mylist8" # 7) "mylist6"
exists:确认一个 key 是否存在
redis 127.0.0.1:6379> exists HongWan # (integer) 0 不存在 HongWan 这个 key redis 127.0.0.1:6379> exists age # (integer) 1 age 这个 key 是存在的
del:删除一个 key
redis 127.0.0.1:6379> del age # (integer) 1 redis 127.0.0.1:6379> exists age # (integer) 0
expire:设置一个 key 的过期时间(单位:秒)
ttl: 获取一个 key 值的有效时期,直至为 -1 说明此值已过期 或者 没有过期时间(比如中途使用 persist 移除了过期时间,这样就永远不会过期了)
127.0.0.1:6379> expire a 10 # (integer) 1 127.0.0.1:6379> ttl a # (integer) 7 127.0.0.1:6379> ttl a # (integer) 6 127.0.0.1:6379> ttl a # (integer) -2 127.0.0.1:6379> exists a # (integer) 0
move:将当前数据库中的 key 转移到其它数据库中
在本例中,我先显式的选择了数据库 0(重点:默认的数据库就是0),然后在这个库中设置一个 key,接下来我们将这个
key 从数据库 0 移到数据库 1, 之后我们确认在数据库 0 中无此 key 了, 但在数据库 1 中存在
这个 key,说明我们转移成功了
127.0.0.1:6379> select 0 # OK 127.0.0.1:6379> exists 30 # (integer) 0 127.0.0.1:6379> set age 30 # OK 127.0.0.1:6379> get age # "30" 127.0.0.1:6379> move age 1 # (integer) 1 127.0.0.1:6379> get age # (nil) 127.0.0.1:6379> select 1 # OK 127.0.0.1:6379[1]> get age # "30"
persist: 删除过期时间(让它永不过期)
127.0.0.1:6379> expire b 300 # (integer) 1 127.0.0.1:6379> ttl b # (integer) 296 127.0.0.1:6379> ttl b # (integer) 294 127.0.0.1:6379> ttl b # (integer) 293 127.0.0.1:6379> get b # "2" 127.0.0.1:6379> persist b # (integer) 1 127.0.0.1:6379> get b # "2" 127.0.0.1:6379> ttl b # (integer) -1
randomkey: 随机返回一个 key
127.0.0.1:6379> randomkey # "myzset"
rename: 重命名 key 要注意覆盖影响
127.0.0.1:6379> get a # "1" 127.0.0.1:6379> get b # "2" 127.0.0.1:6379> rename b a # OK 127.0.0.1:6379> get a # "2"
type: 返回值的类型
127.0.0.1:6379> type a # string 127.0.0.1:6379> type myzset # zset 127.0.0.1:6379> type mylist # list
服务器相关命令
ping: 测试连接是否存活
redis 127.0.0.1:6379> ping # PONG //执行下面命令之前,我们停止 redis 服务器 redis 127.0.0.1:6379> ping # Could not connect to Redis at 127.0.0.1:6379: Connection refused //执行下面命令之前,我们启动 redis 服务器 not connected> ping PONG
echo:在命令行打印一些内容
redis 127.0.0.1:6379> echo HongWan # "HongWan"
select: 选择数据库。Redis 数据库编号从 0~15,我们可以选择任意一个数据库来进行数据的存取。
redis 127.0.0.1:6379> select 1 # OK redis 127.0.0.1:6379[1]> select 16 # (error) ERR invalid DB index
quit:退出连接。
redis 127.0.0.1:6379> quit [root@localhost redis-2.2.12]#
dbsize:返回当前数据库中 key 的数目。
redis 127.0.0.1:6379> dbsize # (integer) 18
info: 获取服务器的信息和统计。
redis 127.0.0.1:6379> info redis_version:2.2.12 redis_git_sha1:00000000 redis_git_dirty:0 arch_bits:32 multiplexing_api:epoll ...
monitor: 实时转储收到的请求。
启动之后,开启另一个命令行,可以看到监听到了keys *
config get: 获取服务器配置信息。
127.0.0.1:6379> config get dir # 1) "dir" # 2) "C:\\Users\\lizhaohong\\Desktop\\redis-windows-master\\src\\msopentech\\redis-64.2.8.2101"
flushdb:删除当前选择数据库中的所有 key。
在本例中我们将 0 号数据库中的 key 都清除了。
127.0.0.1:6379> dbsize # (integer) 18 127.0.0.1:6379> flushdb # OK 127.0.0.1:6379> dbsize # (integer) 0
flushall:删除所有数据库中的所有 key。
redis 127.0.0.1:6379[1]> dbsize #(integer) 1 redis 127.0.0.1:6379[1]> select 0 #OK redis 127.0.0.1:6379> flushall #OK redis 127.0.0.1:6379> select 1 #OK redis 127.0.0.1:6379[1]> dbsize # (integer) 0