Redis (REmote DIctionary Server)

基础


 一.简介

Nosql

即 Not-Only SQL( 指非关系型的数据库),作为关系型数据库的补充。

作用:应对基于海量用户和海量数据前提下的数据处理问题。

特征:     可扩容,可伸缩     大数据量下高性能         灵活的数据模型     高可用

常见 Nosql 数据库:Redis        memcache        HBase        MongoDB

Redis是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。

特征:

         1)数据间没有必然的关联关系

         2)内部采用单线程机制进行工作(一条线往下走 )

         3)高性能。官方提供测试数据,50个并发执行100000 个请求,读的速度是110000 次/s,写的速度是81000次/s。

         4)多数据类型支持

                 字符串类型 string         列表类型 list          

                 散列类型 hash              集合类型 set          有序集合类型 sorted_set

         5)持久化支持。可以进行数据灾难恢复

应用:

         1)为热点数据加速查询(主要场景),如热点商品、热点新闻、热点资讯、推广类等高访问量信息等

         2)任务队列,如秒杀、抢购、购票排队等

         3)即时信息查询,如各位排行榜、各类网站访问统计、公交到站信息、在线人数信息(聊天室、网站)、设备信号等

         4)时效性信息控制,如验证码控制、投票控制等

         5)分布式数据共享,如分布式集群架构中的 session 分离

         6)消息队列

         7)分布式锁


二、下载与安装


三、基本操作

1.添加信息

        功能:设置 key,value 数据      

        命令:set key value        eg:set name itheima

2.查询信息

        功能:根据 key 查询对应的 value,如果不存在,返回空(nil)

        命令:get key          eg:get name

3.清除屏幕信息

        功能:清除屏幕中的信息

        命令:clear     (不同系统可能不一样,有的是cls)

4. 退出客户端命令行模式

        功能:退出客户端

        命令:       quit                               exit   

                         <ESC>(用CMD执行可以避免esc之后直接退出客户端)

5.帮助

        功能:获取命令帮助文档,获取组中所有命令信息名称

        命令:help 命令名称    (看单个命令)     help @组名(可以获取到群组命令)

        


四、数据类型

redis 数据存储格式,自身是一个 Map,其中所有的数据都是采用 key : value 的形式存储

数据类型指的是存储的数据的类型,也就是 value 部分的类型,key 部分永远都是字符串

string

1.存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型

2.存储数据的格式:一个存储空间保存一个数据

3.存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用(但实际上还是字符串)

4.基本操作:

         添加/修改数据        set key value

         获取数据                get key

         删除数据                del key

         添加/修改多个数据        mset key1 value1 key2 value2 …    (m –> Multiple多个)

         获取多个数据                mget key1 key2 …

         获取数据字符个数(字符串长度)     strlen key

         追加信息到原始信息后部(如果原始信息存在就追加,否则新建)append key value

5.扩展操作:

大型企业级应用中,分表操作是基本操作,使用多张表存储同类型数据,但是对应的主键 id 必须保证统一性,不能重复。

         Oracle 数据库具有 sequence 设定,

         MySQL数据库并不具有类似的机制,解决方式如下

         设置数值数据增加指定范围的值

                   incr key

                   incrby key increment (increment的值可以为正[加效果]或负[减效果],)

                   incrbyfloat key increment (小数就只能用这种方法去加)

         设置数值数据减少指定范围的值

                   decr key

                   decrby key increment

        string 作为数值操作,在redis内部存储默认就是一个字符串,当遇到增减类操作incr,decr时会转成数值型进行计算。

        redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响。(a调用的时候,b调用不到)

         注意:按数值进行操作的数据,如 果原始数据不能转成数值,或超越了redis 数值上限范围,将报错。 9223372036854775807(java中long型数据最大值,Long.MAX_VALUE)

         redis用于控制数据库表主键id,为数据库表主键提供生成策略,保障数据库表的主键唯一性。此方案适用于所有数据库,且支持数据库集群

设置数据具有指定的生命周期

         setex key seconds value

         psetex key milliseconds value

redis 控制数据的生命周期,通过数据是否失效控制业务行为,适用于所有具有时效性限定控制的操作

redis应用于各种结构型和非结构型高热度数据访问加速

6.string 类型数据操作的注意事项

1)数据操作不成功的反馈与数据正常操作之间的差异

        1]表示运行结果是否成功                (integer) 0 → false 失败         (integer) 1 → true 成功

        2]表示运行结果值                          (integer) 3 → 3    3个              (integer) 1 → 1   1个

2)数据未获取到 (nil)等同于null

3)数据最大存储量 512MB

4)数值计算最大范围(java中的long的最大值) 9223372036854775807


hash

1.新的存储需求:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息

2.需要的存储结构:一个存储空间保存多个键值对数据

3.hash类型:底层使用哈希表结构实现数据存储

4.hash存储结构优化

        如果field数量较少,存储结构优化为类数组结构

        如果field数量较多,存储结构使用HashMap结构

5.基本操作

        添加/修改数据     hset key field value

        获取数据       hget key field           hgetall key

        删除数据       hdel key field1 [field2]

        添加/修改多个数据hmset key field1 value1 field2 value2 …

        获取多个数据hmget key field1 field2 …

        获取哈希表中字段的数量hlen key

        获取哈希表中是否存在指定的字段hexists key field

  

6.扩展操作

         获取哈希表中所有的字段名或字段值

                   hkeys key        

                   hvals key

         设置指定字段的数值数据增加指定范围的值

                   hincrby key field increment

                   hincrbyfloat key field increment

7.注意事项:

        hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象。如果数据未获取到,对应的值为(nil)

        hash 可以存储 232 - 1 个键值对

        hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计初衷不是为了存储大量对象而设计的,切记不可滥用,更不可以将hash作为对象列表使用

        hgetall 操作可以获取全部属性,如果内部field过多,遍历整体数据效率就很会低,有可能成为数据访问瓶颈

  

String整体性,一次性数据更新或获取,以读为主

Hash群组概念,可以用filed进行隔开,以更新为主


list

1.数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分

2.需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序

3.list类型:保存多个数据,底层使用双向链表存储结构实现

4.基本操作:

         添加/修改数据

                   lpush key value1 [value2] ……(从左边进)

                   rpush key value1 [value2] ……(从右边进 )

         获取数据

                   lrange key start stop

                   lindex key index

                   llen key

         获取并移除数据

                   lpop key(从左边把元素给拿出来 )

                   rpop key

         规定时间内获取并移除数据

                   blpop key1 [key2] timeout(b是阻塞的意思)

                   brpop key1 [key2] timeout

                   brpoplpush source destination timeout

5.扩展操作

移除指定数据        lrem key count value

 redis 应用于具有操作先后顺序的数据控制

6.注意事项

     list中保存的数据都是string类型的,数据总容量是有限的,最多232 - 1 个元素 (4294967295)。

     list具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出栈操作

     获取全部数据操作结束索引设置为-1

     list可以对数据进行分页操作,通常第一页的信息来自于list,第2页及更多的信息通过数据库的形式加载

解决方案

        依赖list的数据具有顺序的特征对信息进行管理

        使用队列模型解决多路信息汇总合并的问题

        使用栈模型解决最新消息的问题

redis 应用于最新消息展示


set

1.新的存储需求:存储大量的数据,在查询方面提供更高的效率

2.需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询

  

3.set类型:与hash存储结构完全相同,仅存储键,不存储值(nil),并且值是不允许重复的

4.基本操作

         添加数据               sadd key member1 [member2]

         获取全部数据        smembers key

         删除数据               srem key member1 [member2]

         获取集合数据总量 scard key

         判断集合中是否包含指定数据        sismember key member

5.拓展操作

         随机获取集合中指定数量的数据        srandmember key [count]

         随机获取集合中的某个数据并将该数据移出集合        spop key [count]

 

redis 应用于随机推荐类信息检索,例如热点歌单推荐,热点新闻推荐,热卖旅游线路,应用APP推荐,大V推荐等

         求两个集合的交、并、差集

                   sinter key1 [key2]

                   sunion key1 [key2]

                   sdiff key1 [key2]

         求两个集合的交、并、差集并存储到指定集合中

                   sinterstore destination key1 [key2]

                   sunionstore destination key1 [key2]

                   sdiffstore destination key1 [key2]

         将指定数据从原始集合中移动到目标集合中

                   smove source destination member

redis 应用于同类信息的关联搜索,二度关联搜索,深度关联搜索

显示共同关注(一度检索)

显示共同好友(一度检索)

由用户A出发,获取到好友用户B的好友信息列表(一度检索)

由用户A出发,获取到好友用户B的购物清单列表(二度检索)

由用户A出发,获取到好友用户B的游戏充值列表(二度检索)

6.注意事项

       set 类型不允许数据重复,如果添加的数据在 set 中已经存在,将只保留一份

       set 虽然与hash的存储结构相同,但是无法启用hash中存储值的空间

Redis应用于同类型不重复数据的合并操作(校验时提供基础数据不要提供校验结果,即图片上的红色所指部分)


sortes_set

1.新的存储需求:数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式

2.需要的存储结构:新的存储模型,可以保存可排序的数据

3.sorted_set类型:在set的存储结构基础上添加可排序字段

4.基本操作

        添加数据         zadd key score1 member1 [score2 member2]

        获取全部数据

                   zrange key start stop [WITHSCORES](正向排序,从小到大)

                   zrevrange key start stop [WITHSCORES](反向操作)

        删除数据zrem key member [member ...](按值去的,不是按score去的)

        按条件获取数据

                   zrangebyscore key min max [WITHSCORES] [LIMIT](limit 有一种分页的感觉)

                   zrevrangebyscore key max min [WITHSCORES]

        条件删除数据

                   zremrangebyrank key start stop zremrangebyscore key min max

       注意:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值