Redis第四章:五大数据类型

  • 一、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

 

posted @ 2020-03-14 20:44  ZSJ-白  阅读(210)  评论(0)    收藏  举报