默认16个数据库,类似数组下标从零开始,初始默认使用零号库
redis 整体命令
127.0.0.1:6379> select 0 # 使用0 号数据库
OK
127.0.0.1:6379> keys * # 查看当前数据库中所有键的集合
(empty array)
127.0.0.1:6379> dbsize # 查看当前数据库的key的数量
(integer) 0
127.0.0.1:6379> flushall # 清空全部的库
OK
127.0.0.1:6379> flushdb # 清空当前库
OK
127.0.0.1:6379> set name zhaomingming # 设置值
OK
127.0.0.1:6379> get name # 获取值
"zhaomingming"
127.0.0.1:6379> exists name # 查看这个键是否存在,1表示存在,0 表示不存在
(integer) 1
127.0.0.1:6379> exists name10
(integer) 0
127.0.0.1:6379> expire name 10 # 给这个键设置过期时间,单位是秒
(integer) 1
127.0.0.1:6379> ttl name # 查看这个键还有多少秒就过期
(integer) 6
127.0.0.1:6379> get name
"zhaomingming"
127.0.0.1:6379> ttl name
(integer) 0
127.0.0.1:6379> get name # 这次获取值,值已经为空
(nil)
127.0.0.1:6379> type name # 查看这个键的类型
string
127.0.0.1:6379>
字符串String
127.0.0.1:6379> set name zhaoming # 设置值
OK
127.0.0.1:6379> get name # 根据key 获取值
"zhaoming"
127.0.0.1:6379> del name # 根据名字删除这个键值对,返回1 表示删除成功
(integer) 1
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> exists name # 查看这个key 是否存在
(integer) 0
127.0.0.1:6379> append name hello # 对不存在的key 进行拼接操作,相当于 set name hello
(integer) 5 # 表示插入的字节数
127.0.0.1:6379> append name world # 对原有的key 拼接,返回拼接后的key 字节数
(integer) 10
127.0.0.1:6379> get name
"helloworld"
127.0.0.1:6379> strlen name # 查看这个key 的长度(字节数)
(integer) 10
# 当值 是数字时,对这个值进行操作
127.0.0.1:6379> set views 0 # 设置值
OK
127.0.0.1:6379> incr views # 对这个值进行自增(+1)
(integer) 1
127.0.0.1:6379> incr views # 对这个值进行自增(+1)
(integer) 2
127.0.0.1:6379> incr views # 对这个值进行自增(+1)
(integer) 3
127.0.0.1:6379> decr views # 对这个值进行自减(-1)
(integer) 2
127.0.0.1:6379> decr views # 对这个值进行自减(-1)
(integer) 1
127.0.0.1:6379> incrby views 10 # 将 key 中储存的数字加上指定的增量值(加)。
(integer) 11
127.0.0.1:6379> decrby views 10 # 将 key 中储存的数字加上指定的增量值(减)。
(integer) 1
127.0.0.1:6379> get views
"1"
127.0.0.1:6379> set key abcd123456
OK
127.0.0.1:6379> getrange key 0 -1。 # 按照索引查看这个字符串(-1 表示查看所有)
"abcd123456"
127.0.0.1:6379> getrange key 0 2 # 从索引0到索引2处查看对应的元素,
"abc"
127.0.0.1:6379> get key
"abcd123456"
127.0.0.1:6379> setrange key 4 efghijk # 指定索引的位置并设置值
(integer) 11
127.0.0.1:6379> get key
"abcdefghijk"
127.0.0.1:6379> setex key1 60 expire # 查看这个字符串是否存在,并为这个字符串设置过期时间,单位是秒s
OK
127.0.0.1:6379> ttl key1 # 查看还有多少秒过期
(integer) 54
127.0.0.1:6379> setnx key2 redis # 如果这个字符串不存在,则设置它为指定值
(integer) 1
127.0.0.1:6379> setnx key2 mongodb # 此时返回的是0,表示设置失败,因为这个key已存在
(integer) 0
127.0.0.1:6379> get key2
"redis"
127.0.0.1:6379> mset k10 v10 k11 v11 k12 v12 # 批量设置键值对
OK
127.0.0.1:6379> keys * # 查看所有键
1) "views"
2) "k10"
3) "key"
4) "key2"
5) "k12"
6) "k11"
7) "name"
127.0.0.1:6379> mget k10 k11 k12 # 批量获取指定的键对应的值
1) "v10"
2) "v11"
3) "v12"
127.0.0.1:6379> msetnx k10 v10 k15 v15 # 原子性操作!msetnx 如果不存在则设置
(integer) 0
127.0.0.1:6379> get key15 # 因为k10 已存在,连累了k15,不能设置成功
(nil)
127.0.0.1:6379> mset user:1:name zhangsan user:1:age 2 # 设置对象
OK
127.0.0.1:6379> mget user:1:name # 获取对象中的值
1) "zhangsan"
127.0.0.1:6379> mget user:1:name user:1:age # 可以多值获取
1) "zhangsan"
2) "2"
127.0.0.1:6379> getset db mongodb # 设置值,并获取旧值,如果没有这个键,则返回null
(nil)
127.0.0.1:6379> getset db mongodb # 这次可以获取到了
"mongodb"
127.0.0.1:6379> get db
"mongodb"
127.0.0.1:6379> getset db redis # 获取之前的值,并设置新值
"mongodb"
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379>
String数据结构是简单的key-value类型,value其实不仅可以是String,也可以是数字。
常规key-value缓存应用:
常规计数:微博数,粉丝数等。
列表List
127.0.0.1:6379> lpush list one # 从左边插入元素,先进后出
(integer) 1
127.0.0.1:6379> lpush list two # 给名为list 的集合添加元素
(integer) 2
127.0.0.1:6379> lpush list three # 添加元素
(integer) 3
127.0.0.1:6379> rpush list right # 从右边添加元素,先添加的永远在最里面
(integer) 4
127.0.0.1:6379> lrange list 0 -1 # 查看这个集合中的全部元素
1) "three"
2) "two"
3) "one"
4) "right"
127.0.0.1:6379> lrange list 0 2 # 查看索引0 到索引2 处的元素
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lpop list # 移除集合第一个元素并返回,如果key 不存在,则返回nil
"three"
127.0.0.1:6379> rpop list # 移除集合最后一个元素并返回
"right"
127.0.0.1:6379> lrange list 0 -1 # 查看这个集合中的全部元素
1) "two"
2) "one"
127.0.0.1:6379> lindex list 1 # 根据索引得到元素
"one"
127.0.0.1:6379> lindex list 0
"two"
127.0.0.1:6379> lindex list -1 # 根据索引得到元素,-1 表示最后一个,0 表示第一个
"one"
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> lpush list one
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> llen list # 查看这个集合元素的个数
(integer) 3
127.0.0.1:6379> lrem list 2 two # 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "one"
127.0.0.1:6379> rpush mylist hello
(integer) 1
127.0.0.1:6379> rpush mylist hello
(integer) 2
127.0.0.1:6379> rpush mylist hello2
(integer) 3
127.0.0.1:6379> rpush mylist hello3
(integer) 4
127.0.0.1:6379> ltrim mylist 1 2 # 对一个列表进行修剪,让列表只保留指定区间内的元素,不在指定区 间之内的元素都将被删除。
OK
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "one"
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "hello2"
127.0.0.1:6379> rpush mylist hello
(integer) 3
127.0.0.1:6379> rpush mylist bar
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "hello2"
3) "hello"
4) "bar"
127.0.0.1:6379> rpoplpush mylist myotherlist # 移除列表的最后一个元素,并将该元素添加到另一个列表并返回。
"bar"
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "hello2"
3) "hello"
127.0.0.1:6379> lrange myotherlist 0 -1
1) "bar"
127.0.0.1:6379> exists list
(integer) 1
127.0.0.1:6379> lset list 0 item # 将列表 key 下标为 index 的元素的值设置为 value
OK
127.0.0.1:6379> lrange list 0 -1
1) "item"
2) "one"
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> exists list
(integer) 0
127.0.0.1:6379> lset list 0 item
(error) ERR no such key
127.0.0.1:6379> lset list 1 new # 更新值
(error) ERR no such key
127.0.0.1:6379> lrange list 0 -1
(empty array)
127.0.0.1:6379> lpush list
(error) ERR wrong number of arguments for 'lpush' command
127.0.0.1:6379> lpush list value1
(integer) 1
127.0.0.1:6379> lset list 0 new
OK
127.0.0.1:6379> lrange list 00
(error) ERR wrong number of arguments for 'lrange' command
127.0.0.1:6379> lrange list 0 0
1) "new"
127.0.0.1:6379> rpush mylist hello
(integer) 1
127.0.0.1:6379> rpush mylist world
(integer) 2
127.0.0.1:6379> linsert mylist before world there # 用于在列表的元素前或者后插入元素。 # 将值 value 插入到列表 key 当中,位于值 pivot 之前或之后
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "there"
3) "world"
127.0.0.1:6379>
List即可以作为栈,也可以作为队列。
集合Set
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd myset hello # set 添加元素
(integer) 1
127.0.0.1:6379> sadd myset zhaomingming
(integer) 1
127.0.0.1:6379> sadd myset hello
(integer) 0
127.0.0.1:6379> sadd myset world
(integer) 1
127.0.0.1:6379> sadd myset test
(integer) 1
127.0.0.1:6379> smembers myset # 查看set 集合中的元素
1) "world"
2) "zhaomingming"
3) "hello"
4) "test"
127.0.0.1:6379> sismember myset hello # 判断集合中是否存在这元素,1 表示存在,0 表示不存在
(integer) 1
127.0.0.1:6379> sismember myset guess
(integer) 0
127.0.0.1:6379> scard myset # 查看集合中元素的个数
(integer) 4
127.0.0.1:6379> srem myset zhaomingming # 删除集合中指定元素
(integer) 1
127.0.0.1:6379> smembers myset # 查看集合中的元素
1) "world"
2) "hello"
3) "test"
127.0.0.1:6379> srandmember myset # 获取集合中的随机元素
"hello"
127.0.0.1:6379> srandmember myset
"test"
127.0.0.1:6379> srandmember myset 2 # 获取集合中随机元素并指定获取个数
1) "hello"
2) "test"
127.0.0.1:6379> srandmember myset 2
1) "world"
2) "test"
127.0.0.1:6379> spop myset # 移除集合中的一个随机元素,并返回这个元素
"test"
127.0.0.1:6379> spop myset
"world"
127.0.0.1:6379> spop myset
"hello"
127.0.0.1:6379> spop myset
(nil)
127.0.0.1:6379> smembers myset # 查看集合中的元素
(empty array)
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 zhaomingming
(integer) 1
127.0.0.1:6379> sadd myset test
(integer) 1
127.0.0.1:6379> sadd myset test1
(integer) 1
127.0.0.1:6379> smembers myset
1) "zhaomingming"
2) "world"
3) "hello"
4) "test"
5) "test1"
127.0.0.1:6379> smove myset myset world # 移除这个集合中的指定元素
(integer) 1
127.0.0.1:6379> smembers myset
1) "hello"
2) "test"
3) "world"
4) "zhaomingming"
5) "test1"
127.0.0.1:6379> sadd key1 a
(integer) 1
127.0.0.1:6379> sadd key1 b
(integer) 1
127.0.0.1:6379> sadd key1 c
(integer) 1
127.0.0.1:6379> sadd key2 c
(integer) 1
127.0.0.1:6379> sadd key2 d
(integer) 1
127.0.0.1:6379> sadd key2 e
(integer) 1
127.0.0.1:6379> sdiff key1 key2 # 得到key1 集合和别的集合的差集
1) "a"
2) "b"
127.0.0.1:6379> sinter key1 key2 # 两个集合的交集
1) "c"
127.0.0.1:6379> sunion key1 key2 # 两个集合的并集
1) "a"
2) "c"
3) "b"
4) "d"
5) "e"
127.0.0.1:6379>
# smove SOURCE DESTINATION MEMBER
# 将指定成员 member 元素从 source 集合移动到 destination 集合。
哈希Hash
kv模式不变,但V是一个键值对
127.0.0.1:6379> hset myhash field1 zhaomingming # 设置集合名称,字段key,值value
(integer) 1
127.0.0.1:6379> hget myhash field1 # 获取小key 对应的字段
"zhaomingming"
127.0.0.1:6379> hmset myhash field1 zhaoheihei field2 hello # 设置多个键值对
OK
127.0.0.1:6379> hget myhash field1
"zhaoheihei"
127.0.0.1:6379> hgetall myhash # 获取这个集合的中的所有键值对
1) "field1"
2) "zhaoheihei"
3) "field2"
4) "hello"
127.0.0.1:6379> hdel myhash field1 # 删除这个小key
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "field2"
2) "hello"
127.0.0.1:6379> hlen myhash # 查看这个集合中键值对的个数
(integer) 1
127.0.0.1:6379> hmset myhash field1 hello field2 world # 再次设置可以覆盖值
OK
127.0.0.1:6379> hlen myhash # 获取集合中键值对的个数
(integer) 2
127.0.0.1:6379> hexists myhash field1 # 判断集合中是否存在这个小key,存在返回1,不存在返回0
(integer) 1
127.0.0.1:6379> hexists myhash field3
(integer) 0
127.0.0.1:6379> hkeys myhash # 获取集合中所有key
1) "field2"
2) "field1"
127.0.0.1:6379> hvals myhash # 获取集合中所有的值
1) "world"
2) "hello"
127.0.0.1:6379> hset myhash field 5 # 设置值
(integer) 1
127.0.0.1:6379> hincrby myhash field 1 # 对这个字段的值自增1
(integer) 6
127.0.0.1:6379> hget myhash field # 获取自增后的结果值
"6"
127.0.0.1:6379> hincrby myhash field -10 # 对这个字段自减
(integer) -4
127.0.0.1:6379> hget myhash field
"-4"
127.0.0.1:6379> hsetnx myhash field1 hello
(integer) 0
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> hsetnx myhash field1 hello # 如果这个字段不存在,则设置值
(integer) 1
127.0.0.1:6379> hsetnx myhash field1 world # 已存在,则设置值会失败
(integer) 0
127.0.0.1:6379> hget myhash field1 # 获取的还是原来的值
"hello"
127.0.0.1:6379>
Redis hash是一个string类型的fifield和value的映射表,hash特别适合用于存储对象。
存储部分变更的数据,如用户信息等。
有序集合Zset
在set基础上,加一个score值。之前set是k1 v1 v2 v3,现在zset是 k1 score1 v1 score2 v2
127.0.0.1:6379> zadd myset 1 one # 添加元素,并排序
(integer) 1
127.0.0.1:6379> zadd myset 2 two 3 three # 添加多个元素
(integer) 2
127.0.0.1:6379> zrange myset 0 -1 # 查看元素
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> zadd salary 2500 xiaoming
(integer) 1
127.0.0.1:6379> zadd salary 5000 xiaohong
(integer) 1
127.0.0.1:6379> zadd salary 500 zhaomingming
(integer) 1
127.0.0.1:6379> zrangebyscore salary -inf +inf # 返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大) 次序排列。
1) "zhaomingming"
2) "xiaoming"
3) "xiaohong"
127.0.0.1:6379> zrangebyscore salary -inf +inf # 显示整个有序集
(empty array)
127.0.0.1:6379> zrangebyscore salary -inf +inf withscores # 递增排列
1) "zhaomingming"
2) "500"
3) "xiaoming"
4) "2500"
5) "xiaohong"
6) "5000"
127.0.0.1:6379> zrevrange salsry 0 -1 withscores
(empty array)
127.0.0.1:6379> zrevrange salary 0 -1 withscores # 递减排列
1) "xiaohong"
2) "5000"
3) "xiaoming"
4) "2500"
5) "zhaomingming"
6) "500"
127.0.0.1:6379> zrangebyscore salary -inf 2500 withscores # 显示工资 <=2500 的所有成员
1) "zhaomingming"
2) "500"
3) "xiaoming"
4) "2500"
127.0.0.1:6379> zrange salary 0 -1
1) "zhaomingming"
2) "xiaoming"
3) "xiaohong"
127.0.0.1:6379> zrem salary zhaomingming # zrem 移除有序集中的一个或多个成员
(integer) 1
127.0.0.1:6379> zrange salary 0 -1
1) "xiaoming"
2) "xiaohong"
127.0.0.1:6379> zcard salary # 用于计算集合中元素的数量。
(integer) 2
127.0.0.1:6379> zadd myset 1 hello
(integer) 1
127.0.0.1:6379> zadd myset 2 world 3 kuangshen
(integer) 2
127.0.0.1:6379> zcount myset 1 3 # 计算有序集合中指定分数区间的成员数量。
(integer) 6
127.0.0.1:6379> zcount myset 1 2
(integer) 4
127.0.0.1:6379> zadd salary 2500 xiaoming
(integer) 0
127.0.0.1:6379> zadd salary 5000 xiaohong
(integer) 0
127.0.0.1:6379> zadd salary 500 zhaomingming
(integer) 1
127.0.0.1:6379> zrange salary 0 -1 withscores # 显示所有成员及其 score 值
1) "zhaomingming"
2) "500"
3) "xiaoming"
4) "2500"
5) "xiaohong"
6) "5000"
127.0.0.1:6379> zrank salary zhaomingming # 显示 zhaomingming 的薪水排名,最少
(integer) 0
127.0.0.1:6379> zrank salary xiaohong # 显示 xiaohong 的薪水排名,第三
(integer) 2
127.0.0.1:6379> zrevrank salary zhaomingming # 返回有序集中成员的排名。其中有序集成员按分数值递减(从大到小)排序。
(integer) 2
127.0.0.1:6379> zrevrank salary xiaohong
(integer) 0
127.0.0.1:6379>
k