天天看点

Redis的快速上手与基本使用

NOSQL?

  • 概念

    NoSQL:Not Only SQL 不仅仅是 SQL,通常指的是非关系型的数据库(没有表与表之间的关联关系),向mysql、oracle都属于关系型数据库。

  • 有点
    1. 格式灵活:存储数据格式是key=value格式,value的格式可以是文档形式、图片形式等等。
    2. 速度快:非关系型数据库能够使用硬盘或者内存作为载体,而关系型数据库只能使用硬盘作为载体。
    3. 成本低:非关系型数据库部署简单,基本都是开源免费的。
  • 缺点
    1. 不提供sql支持,学习和使用成本较高。
    2. 数据结构相对复杂,导致复杂查询不方便。

NOSQL解决的问题

  • 数据高并发

    在同一个时间点有海量的用户并发访问,导致IO次数过多造成关系型数据库的瘫痪。

  • 海量数据的存储

    类似QQ,微信,微博,每天用户产生海量的用户动态,每天产生几千万条记录。对于关系数据库来说,在一张几亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。

  • 高扩展性和高可用性的需求

    关系型数据库进行扩展和升级是比较麻烦的一样事,对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移。

    非关系型数据库可以通过不断的添加服务器节点来实现扩展,而不需对原有的数据库进行维护。

Redis介绍

  • 概念

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

  • 特征
    1. 数据间没有必然的关联关系。
    2. 内部采用单线程机制进行工作,保证了数据的原子性。
    3. 高性能。官方提供测试数据,50个并发执行100000 个请求,读的速度是110000 次/s,写的速度是81000次/s。
    4. 多数据类型的支持
      • 字符串类型:String
      • 列表类型:List
      • 散列类型:hash
      • 集合类型:set
    5. redis支持持久化,可以进行数据灾难恢复。

Redis的下载安装(linux中)

  • 下载

    wget http://download.redis.io/releases/redis-5.0.0.tar.gz

  • 解压

    tar –xvf redis-5.0.0.tar.gz

  • 下载编译软件(因为redis是基于c++开发的)

    yum -y install gcc-c++

  • 编译(在解压的目录中执行)

    make

  • 安装(在解压的目录中执行)

    make install

Redis服务器的启动

  • 启动服务器——指定端口号启动

    redis-server [--port port]

    redis-server --port 6379

  • 启动服务器——以指定的配置文件启动

    redis-server config_file_name

    redis-server redis.conf

Redis客户端启动

  • 启动客户端

    redis-cli [-h host] [-p port]

    redis-cli –h 61.129.65.248 –p 6384

Redis配置文件常用参数设定

  • 设置服务器以守护进程的方式运行,开启后服务器控制台中将打印服务器运行信息(同日志内容相同)

    daemonize yes|no

  • 绑定主机地址(限定的是本机连接时的ip)

    bind ip

  • 设置服务器端口号

    port port

  • 设置服务器文件保存地址

    dir path

  • 服务器允许客户端连接最大数量,默认0,表示无限制。当客户端连接到达上限后,Redis会拒绝新的连接

    maxclients count

  • 客户端闲置等待最大时长,达到最大值后关闭对应连接。如需关闭该功能,设置为 0

    timeout seconds

  • 设置服务器以指定日志记录级别

    loglevel debug|verbose|notice|warning

    注意:日志级别开发期设置为verbose即可,生产环境中配置为notice,简化日志输出量,降低写日志IO的频度
  • 日志记录文件名

    logfile filename

Redis基本操作

  • 设置 key,value 数据

    set key value

    set name zs

  • 根据key,获取相应的value

    get key

    get name

  • 获取命令帮助文档

    help [command]

    help set

  • 获取组中所有命令信息名称

    help [@group-name]

    help @string

Redis数据存储格式

  • redis自身是一个Map,其中所有的数据都是采用key : value的形式存储。
  • 数据类型指的是存储的数据的类型,也就是 value 部分的类型,key 部分永远都是字符串
    Redis的快速上手与基本使用

String

String类型

  • 存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型。
  • 存储数据的格式:一个存储空间保存一个数据。
  • 存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用。
    Redis的快速上手与基本使用

String类型数据的基本操作

  • 添加/修改数据

    set key value

  • 添加/修改多个数据

    mset key1 value1 key2 value2...

  • 获取数据

    get key

  • 获取多个数据

    get key1 key2...

  • 获取数据字符个数(字符串的长度)

    strlen key

  • 追加数据到原始数据后(如果原始信息存在就追加,否则新建)

    append key value

  • 删除数据

    del key

  • 判定性添加数据(key不存在则添加,已存在则不添加)

    setnx key value

Hash

hash类型

  • hash类型:底层使用哈希表结构实现数据存储。
    Redis的快速上手与基本使用
  • hash存储结构优化
    • 如果field数量较少,存储结构优化为类数组结构
    • 如果field数量较多,存储结构使用HashMap结构

hash类型数据的基本操作

  • 添加/修改数据

    hset key field value

  • 添加/修改多个数据

    hmset key field1 value1 field2 value2 …

  • 获取数据

    hget key field

    -> 根据key和field获取对应的value

    hgetall key

    -> 根据key获取所有的field
  • 获取多个数据

    hget key field1 field2...

  • 获取哈希表中支付按的数量

    hlen key

  • 删除数据

    hdel key field1 [field2]...

  • 根据field设置对应的value,如果field存在,则不做操作,如果不存在就是添加数据

    hsetnx key field value

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

    hkey key

    hvals key

list

list类型

  • 数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分。
  • 需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序
  • list类型:保存多个数据,底层使用双向链表存储结构实现
    Redis的快速上手与基本使用

list类型数据的基本操作

  • 添加/修改数据

    lpush key value1 [value2]...

    rpush key value1 [value2]...

    说明:l r 分别代表left 与 right,表示从队列的左边添加数据,还是右边添加数据。
  • 获取数据

    lrange key start stop

    -> 获取指定索引范围的数据,如果获取全部,索引范围的取值为 0 -1

    lindex key index

    -> 获取指定索引上的数据

    llen key

    -> 获取跟指定的key,获取对应value的长度
  • 获取并移除数据

    lpop key

    获取并移除list队列最左边的一个数据

    rpop key

    获取并移除list队列最右边的一个数据。
  • 移除指定数据

    lrem key count value

    -> 指定移除list队列中多少个value

Set

set类型

  • set类型:与hash存储结构完全相同,仅存储键,不存储值(nil),并且值是不允许重复的
    Redis的快速上手与基本使用

set类型数据的基本操作

  • 添加数据 (menber是成员的意思,跟value是一样的)

    sadd key member1 [member2]...

  • 获取全部数据

    smembers key

  • 删除数据

    srem key member1 [member2]...

  • 获取集合数据总量

    scard key

  • 判断集合中是否包含指定数据

    sismenber key menber

  • 随机获取集合中指定数量的数据

    srandmenber key [count]

  • 随机获取集合中的某个数据,并将该数据移除集合

    spop key [count]

key常用指令

  • 查询key

    keys *

    :查询所有的key,* 匹配任意数量的任意符号 ? 配合一个任意符号
  • 获取key的类型

    type key

清除数据库

flushall

:清除redis数据库中所有的数据。