zoukankan      html  css  js  c++  java
  • 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 
    返回集合中的所有成员

  • 相关阅读:
    LightOJ1074(spfa+dfs标记负环及负环能够到达的点)
    (模板)AC自动机模板
    poj3660(floyd最短路)
    (模板)hdoj2544(最短路--bellman-ford算法&&spfa算法)
    hdoj4099(字典树+高精度)
    poj1056(字符串判断是否存在一个字符串是另一个字符串的前缀)
    hdoj1247(字典树)
    poj3630||hdoj1671(字典树)
    (模板)hdoj1251(字典树模板题)
    poj3348(求凸包面积)
  • 原文地址:https://www.cnblogs.com/zcbing/p/6501615.html
Copyright © 2011-2022 走看看