zoukankan      html  css  js  c++  java
  • 非关系型数据库 -- redis

    一、Redis介绍

      (一)NoSql介绍

      为了解决高并发、高可扩展、高可用、大数据存储问题而产生的数据库解决方案,就是NoSql数据库。

    NoSQL,泛指非关系型的数据库NoSQL即Not-Only SQL,它可以作为关系型数据库的良好补充。

      (二)Redis

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

    目前为止Redis支持的键值数据类型如下:

    字符串类型、散列类型、列表类型、集合类型、有序集合类型

      (三)Redis应用场景

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

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

      聊天室的在线好友列表。

      消息队列。(秒杀、抢购、12306等等)

      应用排行榜。

      网站访问统计。

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

    二、Redis安装配置

      (一)redis下载

    官网地址:http://redis.io/

    下载地址:http://download.redis.io/releases/redis-3.2.11.tar.gz

      (二)redis安装

    Redis是C语言开发,建议在linux上运行,本教程使用Centos6.5作为安装环境。

    第一步:在VMware中安装CentOS

    第二步:Linux下安装gcc环境

    [root@hadoop ~]#yum install gcc-c++

    第四步:解压缩Redis源码包第三步:将下载的Redis源码包上传到Linux服务器中

    [root@hadoop ~]# tar -zxvf redis-3.2.11.tar.gz -C /usr/local/src

    第五步:编译redis源码

    [root@hadoop src]# cd /usr/local/src/redis-3.2.11/
    [root@hadoop redis-3.0.7]# make

    第六步:安装redis

    [root@hadoop redis-3.0.7]# make install PREFIX=/usr/local/redis-3.2.11

      (三)redis启动

    前端启动   

    • 启动方式:

    直接运行bin/redis-server将以前端模式启动。

    [root@hadoop redis-3.0.7]# cd /usr/local/redis-3.0.7/bin
    [root@hadoop bin]# ./redis-server
    • 启动缺点:

        ssh命令窗口关闭则redis-server程序结束,不推荐使用此方法

    • 前端启动的关闭:ctrl+c

    后端启动

    第一步:redis源码包/usr/local/src/redis-3.0.7中的redis.conf配置文件复制到/usr/local/redis-3.0.7/bin/下

    [root@hadoop bin]# cd /usr/local/src/redis-3.0.7/
    [root@hadoop redis-3.0.7]# cp redis.conf /usr/local/redis-3.0.7/bin

    第二步:修改/usr/local/redis-3.0.7/bin 下的redis.conf,daemonize由no改为yes 

    [root@hadoop redis-3.0.7]# cd /usr/local/redis-3.0.7/bin
    [root@hadoop bin]# vim redis.conf

    第三步:执行命令

    [root@hadoop bin]# ./redis-server redis.conf

    关闭:

    [root@hadoop bin]# ./redis-cli shutdown

    三、Redis客户端

    • 指定主机和端口
    [root@hadoop bin]# ./redis-cli -h 127.0.0.1 -p 6379

      -p:redis实例的端口号  -h:redis服务器的ip地址

    • 如果不指定主机和端口也可以
    [root@hadoop bin]# ./redis-cli

    四、Redis数据类型

    Redis中存储数据是通过key-value存储的,对于value的类型有以下几种:

    • 字符串
    • Hash类型
    • List
    • Set
    • SortedSet(zset)

    PS:redis中的命令语句中,命令是忽略大小写的,而key是不忽略大小写的。

      (一)String类型

    命令

    赋值:SET key value

    127.0.0.1:6379> set test 123
    OK

    取值:GET key

    127.0.0.1:6379> get test
    "123

    设置/获取多个键值: 

    MSET key value [key value …]

    MGET key [key …]

    127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
    OK
    127.0.0.1:6379> get k1
    "v1"
    127.0.0.1:6379> mget k1 k3
    1) "v1"
    2) "v3"

    取值并赋值: GETSET key value

    127.0.0.1:6379> getset s2 222
    "111"
    127.0.0.1:6379> get s2
    "222"

    删除:DEL key

    127.0.0.1:6379>del test
    (integer) 1

    数值增减 

    n 递增数字

    当存储的字符串是整数时,Redis提供了一个实用的命令INCR,其作用是让当前键值递增,并返回递增后的值。

    语法:INCR key

    127.0.0.1:6379> incr num
    (integer) 1
    127.0.0.1:6379> incr num
    (integer) 2
    127.0.0.1:6379> incr num
    (integer) 3

    n 增加指定的整数: INCRBY key increment

    127.0.0.1:6379> incrby num 2
    (integer) 5
    127.0.0.1:6379> incrby num 2
    (integer) 7
    127.0.0.1:6379> incrby num 2
    (integer) 9

    n 递减数值:DECR key

    127.0.0.1:6379>decr num
    (integer) 9
    127.0.0.1:6379>decr num
    (integer) 8

    n 减少指定的整数DECRBY key decrement

    127.0.0.1:6379> decr num
    (integer) 6
    127.0.0.1:6379> decr num
    (integer) 5
    127.0.0.1:6379> decrby num 3
    (integer) 2
    127.0.0.1:6379> decrby num 3
    (integer) -1

    APPEND的作用是向键值的末尾追加value。如果键不存在则将该键的值设置为value,即相当于SET key value。返回值是追加后字符串的总长度。向尾部追加值

    语法:APPEND key value

    127.0.0.1:6379> set str hello
    OK
    127.0.0.1:6379> append str " world!"
    (integer) 12
    127.0.0.1:6379> get str
    "hello world!"

    获取字符串长度 

    STRLEN命令返回键值的长度,如果键不存在则返回0。

    语法:STRLEN key

    127.0.0.1:6379> strlen str
    (integer) 0
    127.0.0.1:6379> set str hello
    OK
    127.0.0.1:6379> strlen str
    (integer) 5

    应用 

    自增主键

    商品编号、订单号采用string的递增数字特性生成。201703240000000

    Key value

    定义商品编号key:items:id   key value

    192.168.101.3:7003> INCR items:id
    (integer) 2
    192.168.101.3:7003> INCR items:id
    (integer) 3

      (二)Hash类型

    使用string的问题:

    假设有User对象以JSON序列化的形式存储到Redis中,User对象有id,username、password、age、name等属性,存储的过程如下:

    {
        Id : 1,
        Username: zhangsan
    }
    set user { Id : 1,username: zhangsan}

    保存、更新:

    User对象à json(string) à redis

    如果在业务上只是更新age属性,其他的属性并不做更新我应该怎么做呢?如果仍然采用上边的方法在传输、处理时会造成资源浪费,下边讲的hash可以很好的解决这个问题。

    redis hash介绍

      hash叫散列类型,它提供了字段和字段值的映射。字段值只能是字符串类型,不支持散列类型、集合类型等其它类型。

    命令

    赋值

    HSET命令不区分插入和更新操作,当执行插入操作时HSET命令返回1,当执行更新操作时返回0。

    • 一次只能设置一个字段值

    语法:HSET key field value

    127.0.0.1:6379> hset user username zhangsan
    (integer) 1

    一次可以设置多个字段值 

    语法:HMSET key field value [field value ...]

    127.0.0.1:6379> hmset user age 20 username lisi
    OK

    当字段不存在时赋值,类似HSET,区别在于如果字段存在,该命令不执行任何操作 

    语法:HSETNX key field value

    --如果user中没有age字段则设置age值为30,否则不做任何操作
    127.0.0.1:6379> hsetnx user age 30 
    (integer) 0

    取值 

    • 一次只能获取一个字段值

    语法:HGET key field

    127.0.0.1:6379> hget user username
    "zhangsan“

    一次可以获取多个字段值 

    语法:HMGET key field [field ...]

    127.0.0.1:6379> hmget user age username
    1) "20"
    2) "lisi"

    获取所有字段值 

    语法:HGETALL key

    127.0.0.1:6379> hgetall user
    1) "age"
    2) "20"
    3) "username"
    4) "lisi"

    删除字段,可以删除一个或多个字段,返回值是被删除的字段个数

    语法:HDEL key field [field ...]

    127.0.0.1:6379> hdel user age
    (integer) 1
    127.0.0.1:6379> hdel user age name
    (integer) 0
    127.0.0.1:6379> hdel user age username
    (integer) 1

    增加数字HINCRBY key field increment

    127.0.0.1:6379> hincrby user age 2 //将用户的年龄加2
    (integer) 22
    127.0.0.1:6379> hget user age //获取用户的年龄
    "22

    判断字段是否存在HEXISTS key field

    127.0.0.1:6379> hexists user age //查看user中是否有age字段
    (integer) 1
    127.0.0.1:6379> hexists user name //查看user中是否有name字段
    (integer) 0

    只获取字段名或字段值 

    HKEYS key

    HVALS key

    127.0.0.1:6379> hmset user age 20 name lisi
    OK
    127.0.0.1:6379> hkeys user
    1) "age"
    2) "name"
    127.0.0.1:6379> hvals user
    1) "20"
    2) "lisi"

    语法:HLEN key获取属性数量

    127.0.0.1:6379> hlen user
    (integer) 2

    应用

    存储商品信息

    • 商品字段

    【商品id、商品名称、商品描述、商品库存、商品好评数量】

    • 定义商品信息的key

    商品1001的信息在Redis中的key为:[items:1001]

    • 存储商品信息
    192.168.101.3:7003> HMSET items:1001 id 3 name apple price 999.9
    OK

    获取商品信息 

    192.168.101.3:7003> HGET items:1001 id
    "3"
    192.168.101.3:7003> HGETALL items:1001
    1) "id"
    2) "3"
    3) "name"
    4) "apple"
    5) "price"
    6) "999.9"
  • 相关阅读:
    越狱第三季开播了
    永远成长的苹果树
    最强最短的武侠小说
    买房和租房15年后的巨大差别[好文转载]
    秋凉了,大家别加班了,早回吧:)
    dedecms dede_archives表中arcrank和ismake两个字段的理解
    asp.net c#读取word 文档的方法
    css实现不固定长度圆角按钮,兼容所有浏览器
    js keyup、keypress和keydown事件 详解
    android中使用webview缓存网页
  • 原文地址:https://www.cnblogs.com/AardWolf/p/10956143.html
Copyright © 2011-2022 走看看