-
一、Redis数据库类型图解
-
二、Key基本操作
1、keys * -----查看当前库的所有键
127.0.0.1:6379> keys * (empty list or set)
2、exists <key>-----------判断某个键是否存在
3、type <key>-------------查看键的类型
4、del <key>------------删除某个键
5、expire <key> <seconds> -------------- 为键值设置过期时间,单位秒
6、ttl <key> ------------- 查看多少秒过期,-1表示永不过期,-2表示已过期
7、dbsize --------------- 查看当前数据库的key的数量
8、flushdb --------------- 清空当前库
9、flushall -------------- 通杀全部库
-
三、五大数据类型
1、String
(1)基本介绍
a、String是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
b、String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或序列化的对象。
c、String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512m。
(2)特性
i++不是,可能被打断
(2)基本命令
1)get <key> -------------- 查询对应键值
127.0.0.1:6379> get k1 "v1"
2)set <key> <value> ------------------ 添加键值对
127.0.0.1:6379> set k1 v1 OK 127.0.0.1:6379> set k2 v2 OK
3)append <key> <value> ---------------- 将给定的<value>追加到原值的末尾
127.0.0.1:6379> append k1 1234 (integer) 6 127.0.0.1:6379> get k1 "v11234"
4)strlen <key> -----------------获取值的长度
127.0.0.1:6379> strlen k1 (integer) 2
5)setnx <key> <value> ---------------------- 只有在key不存在时设置key的值
127.0.0.1:6379> setnx k1 v11 (integer) 0 127.0.0.1:6379> get k1 "v1"
6)incr <key>----------将key中存储的数字值增1(只能对数字值操作,如果为空,新增值为1)
127.0.0.1:6379> incr k1 (error) ERR value is not an integer or out of range 127.0.0.1:6379> incr k3 (integer) 1 127.0.0.1:6379> get k3 "1"
127.0.0.1:6379> incrby k3 10
(integer) 11
7)decr <key>----------将key中存储的数字值增1(只能对数字值操作,如果为空,新增值为-1)
127.0.0.1:6379> decr k3 (integer) 10
8)incrby/decrby <key> <步长> ---------------- 将key中存储的数字值增减,自定义步长
127.0.0.1:6379> incrby k3 4 (integer) 14 127.0.0.1:6379> decrby k3 3 (integer) 11
9)mset <key1> <vlaue1> <key2> <value2> ----------------- 同时设置一个或多个key-value对
127.0.0.1:6379> mset k4 444 k5 5555 k6 6666 OK
10)mget <key1> <key2> <key3> ----------------- 同时获取一个或多个value
127.0.0.1:6379> mget k4 k6 1) "444" 2) "6666"
11)msetnx <key1> <vlaue1> <key2> <value2> ----------------- 同时设置一个或多个key-value对,当且仅当所有给定的key都不存在时
127.0.0.1:6379> msetnx k4 12345 k8 888 (integer) 0 127.0.0.1:6379> mget k4 k5 1) "444" 2) "5555"
12)getrange <key> <起始位置> <结束位置> -------------------- 获得值的范围,类似JAVA中的substring
127.0.0.1:6379> set k4 123456 OK 127.0.0.1:6379> getrange k4 1 3 "234"
13)setrange <key> 起始位置 <value> ---------------------用<value>覆盖<key>所存储的字符串值,从<起始位置>开始
127.0.0.1:6379> setrange k5 0 12345 (integer) 5 127.0.0.1:6379> get k5 "12345"
14)setex <key> <过期时间> <value> --------------------- 设置键的同时,设置过去时间,单位秒
127.0.0.1:6379> setex k7 30 7777 OK 127.0.0.1:6379> ttl k7 (integer) 26 127.0.0.1:6379> ttl k7 (integer) 23
15)getset <key> <value>---------------------------- 以旧换新,设置了新值同时获得旧值
127.0.0.1:6379> getset k7 771 (nil)
2、List
(1)基本介绍
a、单键多值
b、Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或尾部(右边)
c、它的底层实际上是个双向列表,对两端的操作性能很高,通过索性下标的操作中间的节点性能会较差
(2)常用命令
1)lpush/rpush <key> <value1> <value2> <value3>...-----------------从左边/右边插入一个或多个值
127.0.0.1:6379> lpush k2 v1 v2 v3 v4 (integer) 4
127.0.0.1:6379> RPUSH k3 v5 v6 v7 v8
(integer) 4
2)lpop/rpop <key> ----------------从左边/右边吐出一个值,值在键在,值亡键亡
127.0.0.1:6379> LPOP k2 "v4" 127.0.0.1:6379> RPOP k2 "v1"
3)rpoplpush <key1> <key2>------------------丛<key1>列表右边吐出一个值,插到<key2>列表左边
127.0.0.1:6379> RPOPLPUSH k2 k3 "v2" 127.0.0.1:6379> LRANGE k2 0 5 1) "v3" 127.0.0.1:6379> LRANGE k3 0 5 1) "v2" 2) "v5" 3) "v6" 4) "v7" 5) "v8"
4)lrange <key> <start> <stop>------------------按照索引下标获得元素(从左往右 )
127.0.0.1:6379> lrange k2 0 5 1) "v3" 2) "v2"
5)lindex <key> <value> -------------------- 按照索引下标获得元素(从左到右)
127.0.0.1:6379> LINDEX k3 0 "v2"
6)llen <key> ------------------------------------ 获得列表长度
127.0.0.1:6379> LLEN k3 (integer) 5
7)linsert <key> before <value> <newvalue> ------------------ 在<value>前面添加<newvalue>
127.0.0.1:6379> linsert k3 before v5 v4 (integer) 6 127.0.0.1:6379> LRANGE k3 0 6 1) "v2" 2) "v4" 3) "v5" 4) "v6" 5) "v7" 6) "v8"
8)lrem <key> <n> <value> ---------------------
count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
count = 0 : 移除表中所有与 VALUE 相等的值。
127.0.0.1:6379> lrange k2 0 6 1) "v4" 2) "v4" 3) "v4" 4) "v4" 5) "v3" 127.0.0.1:6379> LREM k2 3 v4 (integer) 3 127.0.0.1:6379> lrange k2 0 6 1) "v4" 2) "v3"
3、set
1、基本介绍
a、Redis set 对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据时,又不希望出现重复数据,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这也是list所不能提供的。
b、Redis的Set是string类型的无序集合。它底层实际上一个value为null的hash表,所以,添加,删除,查找的复杂度都是0(1)。
2、常用命令
1)sadd <key> <value1> <value2> ------------------------ 将一个或多个member元素加入到集合key中,已存在于集合的member元素被忽略
127.0.0.1:6379> sadd k1 v1 v2 v3 v3 v3 v3 v4 v5 (integer) 5
2)smembers <key> ------------------------ 取出该集合的所有值
127.0.0.1:6379> SMEMBERS k1 1) "v3" 2) "v1" 3) "v4" 4) "v2" 5) "v5"
3)sismember <key> <value> --------------------------- 判断集合<key>是否为含有该<value>值,有返回1,没有返回0
127.0.0.1:6379> SISMEMBER k1 v1 (integer) 1 127.0.0.1:6379> SISMEMBER k1 v7 (integer) 0
4)scard <key> ------------------------ 返回该集合的元素个数
127.0.0.1:6379> SCARD k1 (integer) 5
5)srem <key> <value1> <value2> ---------------------- 删除集合中的某个元素
127.0.0.1:6379> SREM k1 v1 v2 (integer) 2 127.0.0.1:6379> SMEMBERS k1 1) "v5" 2) "v3" 3) "v4"
6)spop <key> ---------------------- 随机从该集合中吐出一个值
127.0.0.1:6379> SPOP k1
"v3"
127.0.0.1:6379> SMEMBERS k1
1) "v5"
2) "v4"
7)srandmember <key> <n> -------------------- 随机从该集合中取出n个值,不会从集合中删除
127.0.0.1:6379> SRANDMEMBER k1 1 1) "v4" 127.0.0.1:6379> SMEMBERS k1 1) "v5" 2) "v4"
8)sinter <k1> <k2> -------------------- 返回两个集合的交集元素
127.0.0.1:6379> sadd k2 v2 v4 v6 (integer) 3 127.0.0.1:6379> SINTER k1 k2 1) "v4" 2) "v2"
9)sunion <k1> <k2> ----------------- 返回两个集合的并集元素
127.0.0.1:6379> SUNION k1 k2 1) "v5" 2) "v3" 3) "v6" 4) "v2" 5) "v4" 6) "v1"
10)sdiff <k1> <k2> ------------------ 返回两个集合的差集元素
127.0.0.1:6379> SDIFF k1 k2 1) "v5" 2) "v3" 3) "v1"
127.0.0.1:6379> SDIFF k2 k1
1) "v6"
4、Hash
1、基本介绍
a、Redis hash 是一个键值对集合。
b、Redis hash 是一个string类型的field和value的映射表,hash特别适合用于储存对象。
c、类似JAVA里的Map<String,Object>
2、常用命令
1)hset <key> <field> <value> --------------------- 给<key>集合中的<field>键赋值<value>
127.0.0.1:6379> HSET k5 name zhangsan (integer) 1 127.0.0.1:6379> type k5 hash
2)hget <key> <field> -------------------------------- 从<key>集合<field>取出value
127.0.0.1:6379> HGET k5 name
"zhangsan"
3)hmset <key1> <field1> <value1> <field2> <value2>..... ------------------ 批量设置hash的值
127.0.0.1:6379> HMSET k5 age 15 email 1501790343@qq.com
OK
4)hexists key <field> --------------------------- 查找哈希表key中,给定域field是否存在
127.0.0.1:6379> HEXISTS k5 name
(integer) 1
5)hkeys <key> ------------------- 列出该hash集合的所有filed
127.0.0.1:6379> HKEYS k5
1) "name"
2) "age"
3) "email"
6)hvals <key> ------------------- 列出该hash集合的所有value
127.0.0.1:6379> HVALS k5
1) "zhangsan"
2) "15"
3) "1501790343@qq.x82com"
7)hincrby <key> <field> <increment> ------------- 为哈希表key中的域field的值添加增量increment
127.0.0.1:6379> HINCRBY k5 age 5
(integer) 20
8)hsetnx <key> <field> <value> -------------------- 将哈希表key中的域field的值设置为value,当且仅当域field不存在
127.0.0.1:6379> HSETNX k5 gender man
(integer) 1
5、zset
1、基本介绍
2、常用命令
(1)zadd <key> <score1> <value1> <score2> <value2>... -------------------- 将一个或多个member元素及其score值加入到有序集key中
127.0.0.1:6379> ZADD k6 100 v6 90 v7 80 v8 80 v9 (integer) 4 127.0.0.1:6379> TYPE k6 zset
(2)zrange <key> <start> <stop> [withscores] --------------------返回有序集key中,下标在<start> <stop>之间的元素,按score从小到大;带withscores,可以让分数一起和值返回到结果集
127.0.0.1:6379> ZRANGE k6 0 3 1) "v8" 2) "v9" 3) "v7" 4) "v6"
(3)ZRANGEBYLEX key min max [withscores] [limit offset count] ---------------------- 返回有续集key中,所有score值介于min和max之间(包括等于min或max)的成员。
有序集合按score值递增(从小到大)次序排列
127.0.0.1:6379> ZRANGEBYSCORE k6 80 90 1) "v8" 2) "v9" 3) "v7"
127.0.0.1:6379> ZRANGEBYSCORE k6 80 90 withscores
1) "v8"
2) "80"
3) "v9"
4) "80"
5) "v7"
6) "90"
(4)ZREVRANGEBYLEX key max min [withscores] [limit offset count] ------------ 同上,改为从大到小排列
127.0.0.1:6379> ZREVRANGEBYSCORE k6 90 80 withscores
1) "v7"
2) "90"
3) "v9"
4) "80"
5) "v8"
6) "80"
(5)zincrby <key> <increment> <value> ------------------------ 为元素的score加上增量
127.0.0.1:6379> ZINCRBY k6 5 v7
"95"
(6)zrem <key> <value> -------------------- 删除该集合下指定值的元素
127.0.0.1:6379> ZREM k6 v8
(integer) 1
(7)zcount <key> <min> <max>--------------------- 统计该集合,分数区间的元素个数
127.0.0.1:6379> ZCOUNT k6 60 90 (integer) 2 127.0.0.1:6379> ZCOUNT k6 60 100 (integer) 4
(8)zrank <key> <value> ---------------------- 返回该值在集合中的排名,从零开始
127.0.0.1:6379> ZRANK k6 v8
(integer) 0