Redis从入门到精通

什么是Redis?

Redis是非关系型数据库,是一个高性能的key-value数据库,它是开源的,更是免费的。

Redis能做什么?

存储数据

Redis的优点有哪些?

1.它支持存储丰富的数据类型,比如:Sting,hash,set,List,zset等数据结构的存储。

2.性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s。

3.原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。

这里解释一下什么叫做原子性:操作不可再分,要么全部执行,要么全部不执行。

redis的原子性:

  • 单个操作是原子性的

  • 多个操作也支持事务,即原子性,通过MULTIEXEC指令包起来

这里不得不提一下redis的事物,redis的事物原理是这样子的:

 1.批量操作在发送EXEC命令前被放入队列缓存

 2.收到EXEC命令后进入事物执行,事物中任意命令执行失败,其余的命令都不会被执行

 3.在事物执行过程中,其他客户端提交的命令不会插入到事物执行命令序列中

下面是redis事物的一个例子:redis 127.0.0.1:6379> MULTOK


redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"
QUEUED

redis 127.0.0.1:6379> GET book-name
QUEUED

redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series"
QUEUED

redis 127.0.0.1:6379> SMEMBERS tag
QUEUED

redis 127.0.0.1:6379> EXEC
1) OK
2) "Mastering C++ in 21 days"
3) (integer) 3
4) 1) "Mastering Series"
   2) "C++"
   3) "Programming"

它是以MULT开始一个事物,然后将多个命令入队到事物中,最后由EXEC命令触发事物,一并执行事物中的所有命令。
Redis事物的一些常用命令:
1.DISCARD 
取消事务,放弃执行事务块内的所有命令
2.EXEC 
执行所有事务块内的命令
3.MULTI 
标记一个事务块的开始
4.UNWATCH 
取消 WATCH 命令对所有 key 的监视
5.WATCH key [key ...] 
监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断

4.丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis与其他key-value存储有什么不同?

  • Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

  • Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

Redis的命令有哪些?

 INCR 命令将字符串值解析成整型,将其加一,最后将结果保存为新的字符串值,类似的命令有INCRBYDECR 和 DECRBY。实际上他们在内部就是同一个命令,只是看上去有点儿不同。

使用EXISTS命令返回1或0标识给定key的值是否存在,使用DEL命令可以删除key对应的值,DEL命令返回1或0标识值是被删除(值存在)或者没被删除(key对应的值不存在)。

TYPE命令可以返回key对应的值的存储类型

用EXPIRE来设置超时时间(也可以再次调用这个命令来改变超时时间,使用PERSIST命令去除超时时间 )。我们也可以在创建值的时候设置超时时间

LPUSH 命令可向list的左边(头部)添加一个新元素,而RPUSH命令可向list的右边(尾部)添加一个新元素。最后LRANGE 命令可从list中取出一定范围的元素

LRANGE 带有两个索引,一定范围的第一个和最后一个元素。这两个索引都可以为负来告知Redis从尾部开始计数,因此-1表示最后一个元素,-2表示list中的倒数第二个元素,以此类推

还有一个重要的命令是pop,它从list中删除元素并同时返回删除的值。可以在左边或右边操作

我们增加了三个元素,并弹出了三个元素,因此,在这最后 列表中的命令序列是空的,没有更多的元素可以被弹出。如果我们尝试弹出另一个元素,将会得到一个null

可以使用LTRIM把list从左边截取指定长度。比如 mylist 1 2 3 4 5 ,ltrim mylist 0 2,结果 lrange mylist 0 -1 是 1 2 3

SADD key member1 [member2] 
向集合添加一个或多个成员

SCARD key 
获取集合的成员数

SMEMBERS key 
返回集合中的所有成员

posted @ 2017-03-04 15:53  zcbing  阅读(1744)  评论(1编辑  收藏  举报