美文网首页redis
Redis--概述和常用命令

Redis--概述和常用命令

作者: 易点梅 | 来源:发表于2019-11-11 16:18 被阅读0次

    关系型数据库(SQL):Mysql,oracle

    特点:数据和数据之间、表和字段之间,表和表之间是存在关系的。

    优点:数据之间有关系、进行数据的增删改查时非常方便、关系型数据库有事务操作,保证数据的完整性。

    缺点:因为数据和数据之间是有关系的,关系是由底层大量算法保证,会拉低系统运行速度,消耗系统资源;海量数据时增删改查很可能宕机,维护/扩展也会不好。

    适合处理一般量级数据,安全。

    非关系型数据库(NOSQL):Redis##

    非关系数据库设计之初是为了替代关系型数据库的。

    优点:海量数据的增删改查和维护非常轻松。

    缺点:数据和数据之间没有关系,不能一目了然;没有事务保证数据的完整和安全。

    适合处理海量数据,效率。不一定安全。

    主流NOSQL数据库

    image.png

    NoSQL数据库的四大分类如下:

    1键值(Key-Value)存储数据库

         相关产品:Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
    
         典型应用:内容缓存,主要用于处理大量数据的高访问负载。
    
         数据模型:一系列键值对
    
         优势:优秀的快速查询,稳定性强。
    
         劣势:存储的数据缺少结构化
    

    2列存储数据库

    相关产品:Cassandra、HBase,Riak

    典型应用:分布式的文件系统

    数据模型:以列簇式存储,将同一列数据存在一起

    优势:查找速度快,可扩展性强,更容易进行分布式扩展

    劣势:功能相对局限,使用极大的内存才可调配,且系统处理算法时将有数秒甚至更长时间的不可用,导致大量处理超时

    3文档型数据库(淘汰)**

    相关产品:CouchDB、MongoDb

    典型应用:Web应用(与Key-Value类似,Value是结构化的)

    数据模型:一系列键值对

    优势:数据结构要求不严格

    劣势:查询性能不高,而且缺乏统一的查询语法

    4图形(Graph)数据库**

    相关数据库:Neo4J、infoGrid、infinite、Graph

    典型应用:社交网络【关系网】

    数据模型:图结构

    优势:利用图结构相关算法

    劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案。局限性过强

    Redis概述

    Redis由来

    2008年,意大利的一家创业公司Merzia推出了一款基于MySQL的网站实时统计系统 LLOOGG,然而没过多久该公司的创始人 Salvatore Sanfilippo 便对MySQL 的性能感到失望,于是他决定亲自为 LLOOGG 量身定做一个 数据库,并并于 2009 年开发完成,这个数据库就是Redis。不过Salvatore Sanfilippo并不满足只将 Redis 用于LLOOGG这一款产品,而是希望更多的人使用它,于是在同一年 Salvatore Sanfilippo 将 Redis 开源发布,并开始和 Redis 的另一名主要的代码贡献者 Pieter Noordhuis 一起继续着 Redis 的开发,直到今天。

    Salvatore Sanfilippo 自己也没有想到,短短的几年时间,Redis就拥有了庞大的用户群体。Hacker News 在 2012 年发布了一份数据库的使用情况调查,结果显示有近 12% 的公司在使用 Redis。国内如 新浪微博、街旁网、知乎网,国外如GitHub、Stack Overflow、Flickr等都是Redis的用户。

    VMware 公司从2010年开始赞助 Redis 的开发,Salvatore Sanfilippo和 Pieter Noordhuis 也分别在3月和5月加入VMware,全职开发Redis。

    什么是 Redis

    Redis 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止 Redis 支持的键值数据类型如下:

    1. 字符串类型

    2. 散列类型

    3. 列表类型

    4. 集合类型

    5. 有序集合类型。

    官方提供测试数据:50 个并发执行 100000 个请求,读的速度是 110000 次/s,写的速度是 81000 次/s。数据仅供参考,根据服务器配置会有不同结果。

    Redis 的应用场景

    缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多使用)

    聊天室的在线好友列表。

    任务队列。(秒杀、抢购、12306等等)

    应用排行榜。

    网站访问统计。

    数据过期处理(可以精确到毫秒)

    分布式集群架构中的session分离。

    Redis安装和启动

    redis数据类型

    redis使用的是键值对 保存数据(map)

    key:全部都是字符串

    value:有五种类型

    image.png

    Key名称:自定义,理论上不要过长否则影响使用效率(长度从小到大查询)。也不要太短,要有意义的。

    Redis命令-String命令

    概述:字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型存入和获取的数据将相同。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。

    二进制安全和数据安全是没有关系的。

    image.png

    MySQL-关系型数据库,二进制不安全。【乱码、丢失数据】

    image.png

    赋值(相当于map.put)

    set key value:设定key持有指定的字符串value,如果该key存在则进行覆盖操作,总是返回“OK”。

    image

    取值(相当于map.get)

    get key:获取key的value。如果与该key关联的value是不string类型的,Redis将返回错误信息,因为get命令只能用于获取String value;如果该key不存在,返回(nil)。

    image image

    get key value:先获取该key的值,然后在设置该key的值,新的value会覆盖老的value。

    删除(相当于map.remove)

    del key:删除指定key,返回受影响行数。

    其他:

    获取并修改值

    getset key value:先获取该key的值,然后在设置该key的值。

    递增

    incr key:将指定的key的value原子性的递增1,如果该key不存在,其初始值为0,在incr之后其值为1.如果value的值不能转成整形,如hello,该操作将执行失败并返回相应的错误信息。相当于i++

    递减

    decr key:将指定的key的value原子性的递减1,如果该key不存在,其初始值为0,在decr之后其值为-1,如果value的值不能转成整形,如hello,该操作失败并返回相应错误。相当于i—

    拼接字符串

    append key value:拼接字符串。如果该key存在,则在原有的value后追加该值,如果不存在,则重新创建一个key/value

    将数值自增任意值

    incrby key increment:将指定的key的value原子性增加increment,如果该key不存在,其初始值为0,在incrby后,该值为increment。如果该值不能转成整形,则失败并报错。

    将数值递减任意值

    decrby key decrement:将指定的key的value原子性增加decrement,如果该key不存在,其初始值为0,在incrby后,该值为-decrement。如果该值不能转成整形,则失败并报错。

    String使用环境:主要用于保存******json******格式的字符串

    Redis命令-hash命令

    概述:Redis中的Hash类型可以看成具有String Key和String Value的map容器。所以该类型非常适合用于存储值对象的信息。如Username、Password等。如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。

    赋值

    hset key field value:为指定的key设定field/value对(键值对)。

    hmset key field value field2 value2 …:设置key中的多个filed/value

    取值

    hget key field:返回指定的key中的field的值。

    hmget key filed1 filed2 …:获取key中的多个filed的值

    hgetall key:获取key中的所有filed-value

    删除

    hdel key field field..:可删除一个或者多个字段,返回值是被删除的字段个数。

    del key:删除整个

    增加数字

    hincrby key field increment:设置key中filed的值增加increment

    其他命令

    hexists key field:判断指定的key中的filed是否存在

    hlen key:获取key所包含的filed的数量

    hkeys kye:获取所有的字段

    hvals key:获取所有的value

    keys * ****查询所有的key

    Redis命令-list命令

    概述:dis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。List中可以包含的最大元素数量是4294967295。

      从元素插入和删除的效率视角来看,如果我们是在链表的两头插入或删除元素,这将会是非常高效的操作,即使链表中已经存储了百万条记录,该操作也可以在常量时间内完成。然而需要说明的是,如果元素插入或删除操作是作用于链表中间,那将会是非常低效的。相信对于有良好数据结构基础的开发者而言,这一点并不难理解。
    

    赋值(两端添加)

    lpush key values1 values2 …:在指定的key所关联的list头部插入所有的values。如果该key不存在,该命令在插入的之前创建一个与该key关联的空链表,之后再向该链表的头部插入数据。插入成功,返回元素的个数。

    rpush key values1 values2…:在该list的尾部添加元素。

    取值(查看列表)

    lrange key start end:获取链表中从start到end的元素的值,start、end从0开始计数,也可以为负数,若为-1则标识链表尾部的元素。-2则表示倒数第二个,以此类推..

    删除(两端弹出)

    lpop key:返回并弹出指定的key关联的链表中的第一个元素,即头部元素。如果该key不存在,返回nil;若存在则返回链表中的头部元素

    rpop key:从尾部单出元素。

    获取列表中的元素个数

    llen key:返回指定的key关联的链表中的元素的数量。

    删除某种元素(效率低)

    lrem key count value:删除count个值为value的元素,如果count大于0,从头向尾遍历并删除count个值为value的元素,如果count小于0,则从尾向头遍历并删除。如果count等于0,则删除链表中所有等于value的元素。

    通过索引替换元素(效率低)

    lset key index value:设置链表中的index的脚标的元素值,0代表链表的头元素,-1代表链表的尾元素。操作链表的脚标不存在则抛异常。

    在索引前/****后插入元素(效率低)

    linsert key before|after pivot value:在pivot元素前后插入value这个元素。

    扩展命令

    rpoplpush resource destination:将resource链表中的尾部元素弹出并添加到destination头部。

    rpoplpush resource resource:将resource链表中的尾部元素弹出并添加到resource头部。(循环操作)

    Redis命令-set命令

    概述:Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。集合中最大的成员数为232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

    添加/****删除元素

    sadd key value value1…:向set中添加数据,如果该key的值已有则不会重复添加。

    srem key members members1..:删除set中指定的成员。

    取值

    smembers key:获取set中所有元素

    sismember key member:判断参数中指定的元素是否存在,1表示存在,0表示不存在或者该key本身就不存在。(无论集合中有多少元素都可以极速的返回结果).

    集合运算

    sdiff key1 key2 …:差集运算,返回kye1与key2中相差的成员,而且与key的顺序有关。即返回差集。

    image.png

    sinter key1 key2 …:返回交集

    image.png

    sunion key1 key2 ..:返回并集。

    image.png

    扩展命令

    scard key:获取set中元素数量

    srandmember key:随机返回一个元素

    sdiffstore destination key1 key2..:将key1、key2相差的成员存储在destination上

    sinterstore destination key1 key2..:将返回的交际存储在destination上

    sunionstore destination key1 key2..:将返回的并集存储在destination上

    Redis命令-有序set命令(zset)

    概述:Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

    有序集合的成员是唯一的,但分数(score)却可以重复。

    有序set集合: 有序,不重复。专门用来做排行榜

    添加元素

    zadd key score member score2 member2 …:将所有成员以及该成员的分数放到sorted-set中。如果该元素已经存在则会用新的分数替换原有的分数。返回值是新加入到集合中的元素个数,不包含之前已经存在的元素。

    获取元素

    zscore key member:返回指定成员的分数。

    删除元素

    zrem key member member…****:移除集合中指定成员,可以指定多个。

    范围查询(****顺序查看)

    zrange key start end [withscores] : 获取集合中脚标为start-end的成员,withscores参数表明返回的成员包含其分数。(分数有小到大排列)

    zrevrange key start end [withscores] : 获取集合中脚标为start-end的成员,withscores参数表明返回的成员包含其分数。(分数大到小排列)

    zremrangebyrank key start stop****:按照排名范围删除元素

    zremrangebyscore key min max : 按照分数范围删除元素

    扩展命令

    zrangebyscore key min max [withscores] [limit offset count]: 返回分数在[min,max]的成员并按照分数从低到高排序。[withscores]:显示分数;[limit offset count]:offset,表明脚标为offset的元素开始并返回count个成员。

    zincrby key increment member:设置指定成员的增加的分数。返回值时更改后的分数。

    zcount key min max:获取分数在[min,max]之间的成员。

    zrank key member:返回成员在集合中的排名。索引(从小到大)。

    zrevrank key member:返回成员在集合中的排名。索引(从大到小)。

    Redis命令-通用命令

    keys pattern:获取所有与pattern匹配的key,返回所有与该key匹配的keys。*表示任意一个或多个字符,?表示任意一个字符。

    del key1 key2 ..:删除指定的key。

    exists key:判断该key是否存在,1代表存在,0代表不存在。

    rename key newkey:为当前的key重命名

    expire key time:设置过期时间,单位:秒。过期即删除。

    ttl key:获取该key所剩的超时时间,如果没有设置超时,返回-1.如果返回-2表示超时不存在。

    type key:获取指定key的类型。该命令将以字符串的格式返回。返回的字符串为string、list、set、Hash、zset。如果key不存在返回none。

    redis服务器命令

    ping:测试连接是否存活。ping成功返回PONG;

    echo:在命令行打印一些东西。echo “HELLO WORLD!”;

    select:选择数据库。redis数据库编号【0-15】,选择16是报错;

    quit:退出连接;

    dbsize:返回当前数据库中key的数目;

    info:获取服务器的信息和统计;

    相关文章

      网友评论

        本文标题:Redis--概述和常用命令

        本文链接:https://www.haomeiwen.com/subject/izbtictx.html