Redis基本数据结构总结
前言
Redis的特色在于其读写速度特别快,由于是存储在内存中的,其很是适合于处理大数据量的状况;还有一个是其不一样于其余的关系型数据库,Redis是非关系型数据库,也就是咱们常说的NoSQL,其并不须要一开始去建立好表结构,能够存储自定义的数据;还有Redis是分布式的,其能够主从分离,主从复制,好比说咱们不可能只用一台Redis服务器来处理客户端的请求,由于这样毕竟是存在风险,若是服务器挂掉了,那么其数据就会丢失,并且没法找回,因此存在这么一种方案:多个主服务器用来处理客户端的请求,接着多个Redis分服务器用来将主服务器的数据同步到MySQL,这样在Redis服务器挂掉的时候,咱们仍是能够经过访问MySQL数据库从而获得数据;redis
不少人说Redis和memcached比较相像,可是我没有使用过memcached,因此只是总结了别人的比较。Redis拥有5个数据结构,而memcached只有一个字符串的数据结构,其只能经过append命令将数据添加到字符串的末尾,而且把该字符串看成一个列表在使用,在删除数据的时候,redis能够直接经过remove命令将其真正的删除,可是memcached只可以经过黑名单隐藏该数据从而避免对该数据进行读取,更新。数据库
五种数据结构
这五种数据结构分别是STRING(字符串)、LIST(列表)、SET(集合)、HASH(哈希)、ZSET(有序集合);安全
- 字符串:包括字符串、整数和浮点数;
- 列表:一个链表,链表上面的每一个结点都是一个字符串,其听从队列的访问格式-先进先出,也就是从链表的结尾进行插入,链表的头部进行弹出;
- 集合:里面是一个容器,他不容许存在相同的元素,每一个值都是独一无二的;
- 哈希:是一个键值对组合而成的无序散列表,其的键一样是不容许重复的;
- 有序集合:是在集合的基础之上进行了排序;
在了解那五个操做相关的命令以前,须要先了解关于键的相关的命令:服务器
Key
-
DEL key数据结构
移除给定的一个或者多个key。app
-
KEYS pattern分布式
查找符合给定模式的key,注意其匹配的模式怎么使用,包括了?、*、[]等等。memcached
-
RANDOMKEY大数据
从当前数据库中随机返回一个key。编码
-
EXPIRE key seconds
为给定的key设置存活时间,时间一过则把对应的key进行销毁,注意单位为秒。
-
TTL key
获取key剩余的存活时间,单位为秒,和上面的命令相对应,若是该key不存在或者是过时的话,则返回-2/-1(在不一样数据库返回的值不同?)。
-
MOVE key db
将key移动到指定的db,默认状况下使用的是0号数据库,注意要移动到相应的数据库(SELECT db)才能看到。
-
RENAME key newkey
将key更改成新的key,注意若是newkey在数据库中已经存在,那么旧的key的数据会把已经存在的新的key给覆盖掉。
-
TYPE key
返回指定的key的类型,若是不存在则返回的是none,而不是nil(进行操做才返回的)。
-
OBJECT REFCOUNT key | OBJECT ENCODING key | OBJECT IDLETIME key
分别返回key所引用的次数,key对应的编码,key空闲的时间(没有读也没有写,单位为秒)。
-
RENAMENX key newkey
在RENMAE的基础上判断key是否存在,更加的安全。
-
EXPIREAT key timestamp
设置时间戳。
-
PERSIST key
移除给定key的生存时间,也可使用EXPIRE 来重置。
-
SORT key [BY pattern] [LIMIT offset count] [GETpattern] [ASC|DESC] [ALPHA] [STORE destination]
这个方法只能用在LIST、SET、ZSET上,这里的pattern和以前的keys的pattern是同样的,LIMIT则是用来限制返回的偏移量和数量,GET是获取返回的指定的key的内容,ASC是升序、DESC是降序, ALPHA则是用在对字符串进行排序的时候,STORE则是指定存储的地方,能够指定到一个key上,这样就能够经过GET来访问到。
STRING
-
GET key
获取存储在给定键的值。
-
MGET key...
获取多个指定的键值。
-
GETRANGE key start end
获取指定范围的键值,支持反向操做,若是end超出实际范围,则忽略,返回全值。
-
GETSET key value
集合了GET和SET的功能,不过其返回的是该键被设置以前的值,可是其的值已经发生了改变 ,注意若是以前没有该键,则返回nil。
-
SET key value
设置存储在给定键中的值。
-
SETNX key value
注意在key已经存在的状况下,不进行任何操做,也就是说 SET if key not exist;可能存在一个锁的问题。
-
SETEX key seconds value
集合了SET和EXPIRE的功能,若是key存在,则覆盖掉。
-
SETRANGE key offset value
从偏移量开始设置,注意的是当这个value不足以把以前的value给覆盖掉时,那么仍然会显示以前没有被覆盖掉的值。这里返回的是字符串总的长度。若是空白字符串不存在的话,则至关于在空白字符串上进行操做。
-
MSET key value ...
能够同时设置多个键值对,若是不像覆盖掉key的话,可使用MSETNX。
-
MSETNX key value...
和SETNX的做用是同样的,这里只有所有key都设置成功,才能返回1,只要有一个key已经存在,就会返回0。
-
APPEND key value
追加字符串值,返回新字符串长度,能够添加空字符串,返回的是原来的长度。
-
STRLEN key
返回字符串长度。
-
DECR key
将key的值减一,若是不存在key,则会先进行SET,而且将该键值初始化为0。该命令只能使用在数字上面。
-
DECRBY key decrement
在上面的基础之上减去指定的值。
-
INCR key 和 INCRBY key increment
同DECR和DECRBY
-
SETBIT key offset set_or_clean
将字符串看做是二进制,而且将字符串指定偏移量的二进制位设置为指定值,能够是set或者clean。一样的,若是key不存在,则帮其进行设置。
-
GETBIT key offset
把字符串看做是二进制串,而且返回二进制串中指定偏移量的二进制位的值。
LIST
在LIST中,不须要进行相应的SET操做,若是其不存在,其会自动建立,而且初始化为空列表。
-
LPUSH key value...
把多个键值加入到列表key的表头中,返回列表的长度。
-
LPUSHX key value...
在上面的基础之上,若是key不存在,则不进行任何操做,即 LPUSH if key exists。
-
RPUSH key value
插入到表尾。
-
RPUSHX key value
相似LPUSHX。
-
LPOP key
移出而且返回头元素。
-
RPOP key
移出而且返回尾元素。
-
BLPOP key... timeout
至关于LPOP的阻塞版本,若是其列表没有元素的时候,则会一直阻塞到列表中存在值而且进行LPOP操做,咱们还能够设置超时时间,若是是0的话,则代表其能够阻塞到无限时间长。
-
BRPOP key... timeout
参照BLPOP。
-
LLEN key
返回列表的长度。
-
LRANGE key start stop
返回只等区间长度的元素,注意stop要大于start,不然返回一个空列表。
-
LREM key count value
删除列表中和value相等的元素。这个取决于count的值,若是为正数,正向搜索删除,若是为负数,反向搜索删除,若是等于0,则所有删除;返回被删除的个数。
-
LSET key index value
设置指定下标的值为新的value。
-
LTRIM key start stop
将指定返回值保留下来,其他均删除。
-
LINDEX key index
返回指定下标index的值。
-
LINSERT key BEFORE|AFTER privot value
将key添加到privot以前或者以后,若是privot不存在或者列表为空,则不进行任何操做。若是成功则返回列表长度。
-
RPOPLPUSH source destination
将source中的尾元素弹出而且插到destination列表的头元素的位置上,能够简单的理解为其进行了插队的操做;若是destination不存在则默认设置为空列表,可是若是source不存在则不进行任何的操做。
-
BROPLPUSH source destination timeout
上面版本的阻塞版本,若是timeout为0,则能够无限期阻塞。
SET
-
SADD key-name [item...]
添加多个元素到集合中,而且返回添加到集合中的的元素的个数。
-
SREM key-name [item...]
删除多个元素到集合中,而且返回删除的元素的个数。
-
SISMEMBER key-name item
判断该元素是否存在于该集合中。
-
SCARD key-name
返回该集合的元素数量。
-
SMEMBERS key-name
返回该集合的全部元素。
-
SRANDMEMBER key-name [count]
随机的返回该集合的count个元素,若是count是正数的话,不会重复,可是是负数的话,则可能就会重复。
-
SPOP key-name
随机的弹出而且返回该值。
-
SMOVE from-key-name to-key-name item
将该元素从from移动到to中,成功则返回1,相反返回0。
-
SDIFF key-name [key-name...]
返回在第一个集合中存在,其它集合不存在的元素,即取差集。
-
SDIFFSTORE dest-key key-name [key-name...]
分红DIFF和STORE来看,也就是将DIFF的结果存储在dest-key中。
-
SINTER key-name [key-name...]
返回在全部集合中同时存在的元素,即取并集。
-
SINTERSTORE dest-key key-name [key-name...]
分红INTER和STORE来看,也就是将INTER的结果存储在dest-key中。
-
SUNION key-name [key-name...]
返回在全部集合中存在的元素,即取交集。
-
SUNIONSTORE dest-key key-name [key-name...]
分红UNION和STORE来看,也就是将UNION的结果存储在dest-key中。
有序集合
-
ZADD key-name score member [score member...]
将带有给定分值的成员加入到有序集合中。
-
ZREM key-name member [member..]
从有序集合里面移除给定的成员,而且返回。
-
ZCARD key-name
返回有序集合中元素的数量。
-
ZINCRBY key-name increment member
给成员加上increment。
-
ZCOUNT key-name min max
返回值介于min和max之间的成员数量。
-
ZRANK key-name member
返回成员的排名。
-
ZSCORE key-name member
返回成员的分值。
-
ZRANGE key-name start stop [WITHSCORES]
返回排名介于start到stop的成员,若是WITHSCORES为True的话,则分值也一块儿返回,若是stop为-1的话,则返回所有。
-
ZREVRANK key-name member
分红REV和RANK来看,REV:成员从小到大进行排列,RANK:返回具体的排名位置。
-
ZREVRANGE key-name start stop [WITHSCORES]
分红REV和RANGE来看,REV:成员从小到大进行排列,RANGE:返回具体的排名位置。
-
ZRANGEBYSCORE key-name min max [WITHSCORES] [LIMIT offset count]
返回分值介于min到max之间到全部成员,能够指定返回从偏移量开始的count个成员。
-
ZREVRANGEBYSCORE key-name max min [WITHSCORES] [LIMIT offset count]
返回同上,不过是成员已经从大到小进行排列,注意这里是max-min。
-
ZREMRANGEBYRANK key-name start stop
将ZRANGEBYRANK返回的成员删除掉。
-
ZREMRANGEBYSCORE key-name min max [WITHSCORES] [LIMIT offset count]
一样的道理,将ZRANGEBYSCORE返回的成员删除掉。
-
ZINTERSTORE dest-key key-name [key-name...]
和集合相似,分红INTER和STORE来看,也就是将INTER的结果存储在dest-key中。
-
ZUNIONSTORE dest-key key-name [key-name...]
和集合相似,分红UNION和STORE来看,也就是将UNION的结果存储在dest-key中。
散列
Hash,因此以H开头
-
HMSET key-name key value [key value...]
设置一个或者多个键值对。
-
HMGET key-name key...
能够获取多个键对应的值。
-
HDEL key-name key...
删除多个键值对,返回成功删除的数量。
-
HLEN key-name
返回键值对数量
-
HEXIST key-name key
判断该键值是否存在于散列中。
-
HKEYS key-name
获取散列全部的键。
-
HVALS key-name
获取散列全部的值。
-
HGETALL key-name
获取全部的键值对。
-
HINCREBY key-name key increment
将key保存的值加上increment。
-
HINCREBYFLOAT key-name key increment
将key保存的值加上浮点数increment。