redis入门篇

redis入门篇

    一、redis简介

    redis是key-value数据结构的内存数据库。

    至于具体特点,会在本系列最后一一列出,先看redis的入门。

    二、redis的五种数据类型和指令

    1、对key的操作指令

    判断key是否存在->exists key,代码及结果如下:

127.0.0.1:6379> exists name
(integer) 1

    删除指定的key->del key1...keyN,返回删除key的个数,代码及结果如下:

127.0.0.1:6379> del name one
(integer) 1
    返回指定格式的key->keys pattern,代码及结果如下:
127.0.0.1:6379> keys *
1) "hey"
2) "newint"
3) "list"
    随机返回数据库中的一个key,若无key则返回空串->randomkey,代码及结果如下:
127.0.0.1:6379> randomkey
"list"
127.0.0.1:6379> randomkey
"hey"
    对key重命名,若newkey存在会执行成功并覆盖->rename oldkey newkey,代码及结果如下:
127.0.0.1:6379> rename list cool
OK

    对key重命名,若newkey存在会返回0->renamenx oldkey newkey(在之后大多指令会用到nx后缀),代码以及结果如下:

127.0.0.1:6379> renamenx list hey
(integer) 0
127.0.0.1:6379> rename list hey
OK
    设置key的过期时间->expire key seconds,查看key的过期时间->ttl key,代码及结果如下:
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) 5
127.0.0.1:6379> ttl a
(integer) 5
127.0.0.1:6379> ttl a
(integer) 4
127.0.0.1:6379> ttl a
(integer) 3
127.0.0.1:6379> ttl a
(integer) 2
127.0.0.1:6379> get a
(nil)

    选择数据库index,redis有逻辑分区的16个数据库,互相不干扰,可以通过select index来选择。

    可以将当前数据库的key挪动到指定index的数据库->move key index,代码及结果如下:

127.0.0.1:6379> move newint 1
(integer) 1
127.0.0.1:6379> get newint
(nil)
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get newint
"5"

    2、redis的String类型,以及他的相关指令

    这是redis最简单的数据类型,value的最大上限为一个G,可以存放图片的序列化二进制文件。

    get和set方法可以设置和获取值,代码以及结果如下:

127.0.0.1:6379> set string abc
OK
127.0.0.1:6379> get string
"abc"
    getset key value可以先获取key的值再设置key的value,此操作类似hashmap中的put,如下:
127.0.0.1:6379> getset string bcd
"abc"

    setnx key value,在此前说过,带nx后缀的都是对存在key的情况进行处理,此操作若不存在key则设置加入key并设置值,若存在则返回0。

    mget、mset、msetnx都可以批量的操作key,value,意味着more吧,可能,代码如下:

127.0.0.1:6379> mset string abc string2 bcd string3 tf
OK
127.0.0.1:6379> mget string string2 string3
1) "abc"
2) "bcd"
3) "tf"
    incr和decr可以对一个int类型的string进行++,--操作,若不是int类型的,则会返回错误,如下:
127.0.0.1:6379> incr int
(integer) 6
127.0.0.1:6379> decr int
(integer) 5

    incrby key count,decrby key count可以对int类型的数据进行加减法操作,其实也可以通过incrby一个负数实现decrby的效果。

    3.hash类型

    hash类型是一个key-value对应的数据类型,相当于又对应了一个hash表出来。

    hset key filed value和hget key filed分别可以设置一个key的filed的value和获取一个key的filed的value,代码如下:

127.0.0.1:6379> hset hash one one 
(integer) 1
127.0.0.1:6379> hget hash one
"one"

    hmset和hmget则对应这上诉的批操作。

    hincrby key filed count,可以对指定filed的value进行加法操作,并返回结果值:

127.0.0.1:6379> hincrby hash two 5
(integer) 7
    hexists key filed,可以对该hash底下是否含有指定filed进行判断:
127.0.0.1:6379> hexists hash two
(integer) 1
    hdel key filed,可以删除指定的filed(可删除多个filed):
127.0.0.1:6379> hdel hash two one
(integer) 2

    hlen key,返回该hash的长度,hkeys key,返回该hash所有的key,hvals key,返回该hash所有的value,hgetall key,返回该hash所有的filed和value。

    4、list类型

    list是一个双向链表数据结构的存储,key对应的value可以理解为一个链表。

    lpush可以在一个链表的头部进行插入操作,代码如下:

127.0.0.1:6379> lpush list a b c d
(integer) 4

    rpush则在链表的尾部进行插入操作,其实就理解成左右就好了。

    llen返回当前链表的长度。

    lrange key start end返回指定区间的所有集合,代码如下:

127.0.0.1:6379> lrange list 0 3
1) "d"
2) "c"
3) "b"
4) "a"
     ltrim key start end用于截取指定区间的所有集合,有点类似java中的subString,代码如下:
127.0.0.1:6379> ltrim list 0 1
OK
127.0.0.1:6379> llen list
(integer) 2
    lset key index value用于设置指定index的值,代码如下:
127.0.0.1:6379> lset list 0 z
OK
127.0.0.1:6379> lrange list 0 2
1) "z"
2) "c"
    lrem key count value,从头部(count为正数)或者尾部(count为负数),删除指定数量匹配到为value的值,并返回删除数量,代码如下:
127.0.0.1:6379> lrem list 1 z
(integer) 1
127.0.0.1:6379> lrange list 0 2
1) "c"
    lpop key和rpop分别从头部或者尾部删除并返回删除元素,代码如下:
127.0.0.1:6379> lpop list
"c"

     blpop key1...... keyN timeout 从左到右扫描,返回对第一个非空 list 进行 lpop 操作并返回,比如 blpop list1 list2 list3 如果 list 不存在 list2,list3 都是非空则对 list2 做lpop 并返回从 list2 中删除的元素。如果所有的 list 都是空或不存在,则会阻塞timeout秒,timeout 为 0 表示一直阻塞。当阻塞时,如果有 client 对 key1...keyN 中的任意 key进行 push 操作,则第一在这个 key 上被阻塞的 client 会立即返回。如果超时发生,则返回nil。

    blpop和brpop实际上就是对lpop和rpop的变形,轮训多个list,pop成功则返回;保证在能操作多个list的lpop和rpop同时,又能在当list都为空时进行阻塞,当timeout为0时,表示一直阻塞。

    5、set类型

    set类型是一种无序的集合,无序具体表现如下:

127.0.0.1:6379> sadd set a b c d e f
(integer) 6
127.0.0.1:6379> smembers set
1) "a"
2) "d"
3) "b"
4) "f"
5) "c"
6) "e"

    此上也刚好解释了sadd key value[]和smembers key的作用。另外的,set是一个非重复集合,如下:

127.0.0.1:6379> sadd set a
(integer) 0
127.0.0.1:6379> sadd set b
(integer) 0

    srem key value,可以删除指定元素,代码如下:

127.0.0.1:6379> srem set a b c
(integer) 3
127.0.0.1:6379> smembers set
1) "d"
2) "f"
3) "e"
    spop key count,随机删除并返回set中的元素:
127.0.0.1:6379> spop set 1
1) "d"
127.0.0.1:6379> spop set 2
1) "e"
2) "f"
    srandmember key,随机返回但是不删除set中的元素:
127.0.0.1:6379> srandmember set
"a"
127.0.0.1:6379> srandmember set
"a"
127.0.0.1:6379> srandmember set
"c"
    smove set1 set2 member,将set1中的member移动到set2中,代码如下:
127.0.0.1:6379> sadd set1 2
(integer) 1
127.0.0.1:6379> smove set1 set 2
(integer) 1
127.0.0.1:6379> smembers set
1) "c"
2) "b"
3) "a"
4) "d"
5) "2"
    scard set,返回set的大小:代码如下:
127.0.0.1:6379> scard set
(integer) 5
    sismember set member,判断set中是否存在member,返回1或者0,代码如下:
127.0.0.1:6379> sismember set 2
(integer) 1
    sinter set1 set2,返回两个set的交集,代码如下:
127.0.0.1:6379> sadd set1 a b
(integer) 2
127.0.0.1:6379> sinter set set1
1) "b"
2) "a"
    sinterstore keyset set1 set2,在上者的基础上,将交集保存在keyset中,代码如下:
127.0.0.1:6379> sinterstore keyset  set set1
(integer) 2
127.0.0.1:6379> smembers keyset
1) "b"
2) "a"

    sunion,sunionstore,sdiff,sdiffstore同上,只不过处理的是并集和差集。

    6、sorted set类型

    顾名思义,该类型在set基础上增加了排序的功能。实现方式是让每一个set集合中的元素又拥有了其对应的score,set根据其对应的score实现排序。

    zadd zset score value,添加元素并给元素一个score,若存在value则覆盖:

127.0.0.1:6379> zadd zset 5 c
(integer) 1
    zrange zset start end,这个和list的lrange很像,都是返回指定区间中的元素,只不过此返回的是按照score从小到大排序的元素集合,zrevrange恰好相反,返回的是score从大到小排序的元素集合:
127.0.0.1:6379> zrange zset 0 3
1) "c"
2) "b"
3) "a"
    zrank zset member(返回的是member的score从小到大的排名,zrevrank恰好相反,返回的是score从大到小的排名),返回zset中元素的排名,如此时的c,应该返回的是0:
127.0.0.1:6379> zrank zset c
(integer) 0
    zrem zset member,删除指定的成员,这个操作set以及list都有:
127.0.0.1:6379> zrem zset c
(integer) 1
    zrangebyscore zset min max,在zrange的基础上,返回指定score区间内的元素集合:
127.0.0.1:6379> zrangebyscore zset 0 100
1) "b"
2) "a"

    zincrby zset num member,可以对member对应的score进行加num操作。

    zcount zset min max,返回指定score区间内元素的个数。

    zcard,和scard类似,返回元素的个数:

127.0.0.1:6379> zcard zset
(integer) 2
    zscore zset member,顾名思义,返回对应元素的对应的score:
127.0.0.1:6379> zscore zset a
"100"
    zremrangebyrank zset min max,zremrangebyscore zset min max,分别通过排名和score区间删除集合。

猜你喜欢

转载自blog.csdn.net/that_is_cool/article/details/80669323