Redis入门

一、Redis介绍

1.1 什么是NoSQL

  • 为了解决高并发,高扩展,高可用,大数据存储问题而产生的数据库解决方案,就是NoSQL数据库。
  • Nosql泛指的就是非关系型数据库,Nosql即not-only-sql,它可以作为关系型数据库的良好补充。

1.2 NoSQL数据库分类

  • 键值(key-value)存储数据库
    • 相关的产品:Tokyo cabinet/Tyrant、Redis、Voldement、BerkeleyDB
    • 典型应用:内容缓存,主要用于处理大量数据的高访问负载
    • 数据模型:一系列键值对
    • 优势:快速查询
    • 劣势:存储的数据缺少结构化
  • 列存储数据库
    • 相关产品:Cassandra、HBase、Rick
    • 典型应用:分布式的文件系统
    • 数据模型:以列簇式存储,将同一列数据存在一起
    • 优势:查找数据快,可扩展性强,更容易进行分布式扩展
    • 劣势:功能相对局限
  • 文档数据库
    • 相关产品:CouchDB、MongoDB
    • 典型应用:Web应用(与key-value类似,value是结构化的)
    • 数据模型:一系列键值对
    • 优势:数据结构要求不严格
    • 劣势:查询性能不高,而且缺乏统一的查询语法
  • 图形(Graph)数据库
    • 相关产品:Neo4j、infoGrid、infinite Graph
    • 典型应用:社交网络
    • 数据模型:图结构
    • 优势:利用图结构相关算法
    • 劣势:需要对整个图计算才能得出结果,不容易做出分布式的集群方案

1.3 什么是Redis

  • redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。他通过提供多种键值对数据类型来适应不同场景下的需求,目前为止redis支持的键值数据类型如:字符串类型、散列类型、列表类型、集合类型、有序集合类型

1.4 Redis使用场景

  • 缓存(数据查询、短链接、新闻内容、商品内容等等)(使用最多)
  • 分布式集群架构中的session分离
  • 聊天室的在线好友列表
  • 任务队列(秒杀、抢购、12306)
  • 应用排行榜
  • 网站访问统计
  • 数据过期处理(可以精确到毫秒)

二、Redis的数据结构有五种

2.1.String
    2.1.1 数据结构
        long len       byte数组长度
        long free      可用数组长度
        char buff[] 数据内容
    2.1.2 命令
        键值:设置值通过字符串名
        set:设置键值
        setnx(set not exist):设置键值|若键不存在则可以存,否则返回0.
        setex(set expire):设置键值(含过期时间),set key seconeds value
        setrange:设置指定位置key的键值 例如setrange name diaodiao 2 haha-->dihahaao 从第二个位置开始替换
        mset:设置多个键值
        msetnx:设置多个不存在的键值
        get:通过键获得值
        getset:先通过键获得值,再设置值。
        getrange(0~-1):获取指定范围的字符。范围|从左往右数从0开始  从右往左数-1开始。例如hello(0~4|-5~-1)
        mget:获得多个键的值。

        数字类型相关操作
        set age 10(以下操作都是针对10操作)
        incr 递增1 incr age-->11
        incrby 递增指定数字-->incr age 5->16
        decr 递减1
        decrby 递减指定值

        字符属性操作
        set name "hello"
        append:在尾部追加字符串 append name "Diaodiao"->helloDiaodiao
        strlen: 获得字符串长度 strlen name ->5

2.2 hashes(存储键值对,类似于hashmap)
    2.2.1 配置(redis.conf配置文件中)
        默认:hash-max-zipmap-entries 配置字段最多64个(key的个数)
             hash-max-zipmap-value 配置value最大为512字节
    2.2.2 命令(参考String)
        hset key field value
        hset:若key不存在就创建,否则覆盖。
        hsetnx:设置 hash field 为指定值,如果 key 不存在,则先创建。如果 field 已经存在,返回 0,nx 是not exist 的意思。
        hmset:同时设置hash多个field
        hget:获取指定的hash field
        hmget:获取全部指定的hash field
        hexists:测试指定field是否存在
        hlen:返回指定的field的个数
        hdel:删除指定field。
        hkeys:查询指定key的所有field
        hvals:获取指定key的所有value
        hgetall:获得指定key的所有field以及值

2.3、lists
    2.3.1 简介
        list是基于双向链表的数据结构,操作就是入栈(push)、出栈(pop),包括左(头)入出栈、右(尾)入出栈,也含有超时阻塞的功能。
    2.3.2 命令
        lpush:在key对应的list的头部添加元素。
        lrange:获得list范围的值。 lrange mylist start(0) stop(2)(获取0 1 2索引的值)
        rpush:在key对应的list的尾部添加元素
        linsert:在key对应的特定位置之前或者之后添加字符串元素 linsert mylist before “world”  “hello”
        lset:设置list指定下表的元素(从0开始)
        lrem:从key对应的list里,删除count个value相同的元素。
        ltrim:保留指定key的值范围内的数据。
        lpop:从list的头部删除元素,并且返回删除元素
        rpop:从list的尾部删除元素,并且返回删除元素
        rpoplpush:第一个list的尾部移除元素并且添加到第二个list的头部
        lindex:返回名称为key的list中index位置的元素
        llen:返回key对应list的长度

2.4、sets
    2.4.1 简介
        sets是无序集合,是通过hashtable实现的。额外功能有并集、交集、差集。
   2.4.2 命令
        sadd:向名称为key的set当中添加元素
        srem:删除名称为key的元素
        spop:随机返回并且删除set中某key元素
        sdiff:两个set的差集
        sdiffstore:假设有set3、set1、set2-->set1与set2差集返回的元素,添加到set3中
        sinter:两个set的交集
        sinterstore:假设有set3、set1、set2-->set1与set2交集返回的元素,添加到set3中
        sunion:两个set的并集
        sunionstore:假设有set3、set1、set2-->set1与set2交集返回的元素,添加到set3中
        smove:假设有set1、set2-->删除set1的某个key值,并且添加到set2
        scard:返回set的元素个数
        sismember:测试set中是否存在某member(元素)。
        srandmember:随机返回一个元素,但是不删除

2.5、sorted set
    2.5.1 简介
        sorted set(skip list|双向链表和hashtable的结合体)是set的一个升级版本,升级版本的sets,有两个纬度,一个纬度用来存顺序,一个纬度用于存value。
    2.5.2 命令
        zadd:向名称为key的zset中添加元素member、score用于排序。如果该元素存在,则根据score更新该元素的顺序
        zrem:删除名为key的zset的元素member
        zincrby:如果在名称为 key 的 zset 中已经存在元素 member,则该元素的 score 增加 increment;否则向集合中添加该元素,其 score 的值为 increment
        zrank:返回名称为 key 的 zset 中 member 元素的排名(按 score 从小到大排序)即下标
        zrevrank:返回名称为 key 的 zset 中 member 元素的排名(按 score 从大到小排序)即下标
        zrange:返回名称为 key 的 zset(按 score 从小到大排序)中的 index 从 start 到 end 的所有元素
        zrevrange:返回名称为 key 的 zset(按 score 从大到小排序)中的 index 从 start 到 end 的所有元素
        zrangebyscore:返回集合中 score 在给定区间的元素
        zcount:返回集合中 score 在给定区间的数量
        zcard:返回集合中元素个数
        zscore:返回给定元素对应的 score
        zremrangebyrank:删除集合中排名在给定区间的元素
        zremrangebytscore:删除集合中 score 在给定区间的元素

三、Redis的持久化

3.1(snapshotting)(快照

  • 快照,顾名思义可以理解为拍照一样,把整个内存数据映射到硬盘中,保存一份到硬盘,因此恢复数据起来比较快,把数据映射回去即可,不像AOF,一条条的执行操作命令。
  • 用户在配置文件了配置了类似这样的命令 
        save 900 1 // 900内,有1条写入,则产生快照

       save 300 1000 // 如果300秒内有1000次写入,则产生快照

       save 60 10000 // 如果60秒内有10000次写入,则产生快照

3.2 配置快照文件的名称

  • 在redis 的配置文件redis.conf 设置dbfilename指定rdb快照文件的名称 
dbfilename dunmp.rdb

3.3AOF持久化

默认的情况下redis没有开启aof(append only file)的方式持久化。【操作一次就写一次数据】

  • 可以修改redis的配置文件 redis.conf的配置文件中appendonly参数开启
appendonly yes

开启aof持久化后每执行一条就会更改redis的数据命令,redis就会将命令写入硬盘中的aof文件

AOF文件的保存位置和RDB文件的位置相同,都是通过dir的参数设置

dir ./

默认的文件名是appendonly.aof,可以通过appendfilename参数修改

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值