美文网首页JAVAEE我爱编程
JAVAEE——Redis数据库

JAVAEE——Redis数据库

作者: So_ProbuING | 来源:发表于2018-04-17 17:57 被阅读15次

    NoSQL

    什么是NoSQL

    NoSQL(NoSQL=Not only SQL),直译为“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库

    出现背景

    传统的关系数据库在应付新的网站时,特别是超大规模和高并发的sns类型的web2.0纯动态网站时已经显得力不从心。出现了很多的问题,例如:

    • 对数据库高并发读写的需求
    • 对海量数据的高效率存储和访问的需求
    • 对数据库的高可扩展性和高可用性的需求

    主流NoSQL产品

    图片.png

    NoSQL数据库的分类

    图片.png
    图片.png
    图片.png

    Redis简介

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

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


      图片.png

    关于关系型数据库和nosql数据库

    关系型数据库是基于关系表的数据库,最终会将数据持久化到磁盘上,而nosql数据 库是基于特殊的结构,并将数据存储到内存的数据库。从性能上而言,nosql数据库 要优于关系型数据库,从安全性上而言关系型数据库要优于nosql数据库,所以在实 际开发中一个项目中nosql和关系型数据库会一起使用,达到性能和安全性的双保证。

    安装Redis数据库(Linux)

    • 安装redis编译环境c环境
    yum install gcc-c++
    
    • 上传redis__.tar.gz 上传到服务器中
    • 解压到/usr/local下
    tar -xvf file -c /usr/local
    
    • 进入redis目录,使用make编译redis
    • 在redis目录中,使用
    make PREFIX=/usr/local/redis install命令安装redis到/usr/local/redis中
    
    • 拷贝redis中的redis.conf到安装目录中
    • 启动redis目录下的bin下执行命令:
    redis-server redis.conf
    
    • 如果需要远程连接redis,需要配置redis端口6379,在linux防火墙中添加允许规则
    # centos 6.5
    /sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
    
    /etc/rc.d/init.d/iptables save
    # centos 7
    firewall-cmd --zone=public --add-port=6379/tcp --permanent
    

    启动redis

    在redis bin下

    ./redis-server
    

    启动后看到如下界面代表启动成功


    图片.png

    redis目录结构及功能

    图片.png

    启动redis客户端(前端启动)

    redis客户端在安装目录下 bin/redis-cli 启动客户端

    ./redis-cli
    
    • 存储数据
    set username zhangsan
    
    • 读取数据
    get username
    
    图片.png

    redis后端启动

    • 操作 redis安装目录下 redis.conf
    • 拷贝redis.conf 到安装目录
    • 编辑redis.conf
    vim redis.conf
    
    • 添加daemonize yes 后端启动


      图片.png
    • 指定启动文件 启动redis


      图片.png
    • 关闭后端启动的redis


      图片.png
    • 客户端关闭服务器


      图片.png

    连接redis客户端

    redis-cli -h ip地址 -p端口
    

    向redis发送命令

    图片.png

    使用JAVA来操作Redis -----Jedis

    导入Jar包

    图片.png

    单实例连接

     //获得连接对象
            Jedis jedis = new Jedis("103.249.130.171", 6379);
            String username = jedis.get("username");
            System.out.println(username);
            //存储数据
            jedis.set("addr", "beijing");
            //取出存储的数据
            System.out.println(jedis.get("addr"));
            //释放资源
            jedis.close();
    

    连接池连接

     //创建连接池配置对象
            JedisPoolConfig poolConfig = new JedisPoolConfig();
            //设置最大闲置个数
            poolConfig.setMaxIdle(30);
            //设置最小闲置个数
            poolConfig.setMinIdle(10);
            //设置最大连接数
            poolConfig.setMaxTotal(50);
            //创建redis连接池
            JedisPool pool = new JedisPool(poolConfig, "103.249.130.171", 6379);
            //从连接池中获取redis的连接资源
            Jedis jedis = pool.getResource();
            //存储数据
            jedis.set("age", "22");
            //存取数据
            System.out.println(jedis.get("age"));
            //释放资源
            jedis.close();
    

    Redis的数据结构

    图片.png

    存储String

    概述

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

    赋值

    • set key value 设定key持有特定的字符串value,如果该key存在则进行覆盖操作


      图片.png

    取值

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


      图片.png
    • getset key value 先获取该key的值,然后再设置该key的值


      图片.png

    删除

    使用 del key来删除 key对应的value值


    图片.png

    数值增减

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


      图片.png
    • decr key 将指定的key的value原子性的递减1,如果key不存在,其初始值为0,在incr之后值为-1,如果value的值不能转成整型,则操作将执行失败并返回相应的错误信息

    扩展命令

    • incrby key increment:将指定的key的value原子性增加increment,如果该key不存在,初始值为0 在incrby之后,该值为increment,如果该值不能转成整型,则失败并返回错误


      图片.png
    • decrby key decrement:将指定的key的value原子性减少decrement 如果该key不存在,初始值为0 在decry之后,该值为increment,如果该值不能转成整型。则失败并返回错误信息


      图片.png
    • append key value:拼凑字符串,如果该key存在,则在原有的value后追加该值;如果该key不存在,则重新创建一个key/value,每次执行返回字符串的长度


      图片.png

    存储hash

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


    图片.png

    常用命令

    赋值

    • hset key field value 为指定的key设定field/value对


      图片.png
    • hmset key field value [field2 value2 ...] 设置key中的多个filed/value对


      图片.png

    取值

    • hget key filed 返回指定key中的filed的值


      图片.png
    • hmget key fileds 获取key中的多个filed的值


      图片.png
    • hgetall key:获取key中所有的filed-value


      图片.png

    删除

    • hdel key field[field...] 可以删除一个或多个字段,返回值是被删除的字段个数


      图片.png
    • del key 删除整个的list


      图片.png

    增加数字

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


      图片.png
    图片.png

    存储List

    图片.png 图片.png 图片.png
    图片.png

    常用命令

    两端添加

    • lpush key values[value1,value2...]在指定的key所关联的List的头部插入所有的values(注意是头部)如果该key不存在,该命令在插入之前创建一个与该key关联的空链表。之后再向该链表的头部插入数据。插入成功后,返回元素的个数
    图片.png
    • rpush key values[value1、value2...] 在该list的尾部添加元素


      图片.png
    • lpushx key value:仅当参数中指定的key存在时,向关联的list的头部插入value,如果不存在将不进行插入


      图片.png
    • rpushx key value:在该list的尾部添加元素


      图片.png

    查看列表

    • lrange key start end:获取链表中从start到end元素的值。start、end从0开始计数:也可为负数,若为-1表示链表尾部的元素。-2表示倒数第二个
    lrange list1 0 7 等同于 lrange list 0 -1
    
    图片.png

    两端弹出

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


      图片.png
    • rpop key:从尾部弹出元素


      图片.png

    获取列表中元素的个数

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


      图片.png
    • lrem key count value 删除count个值为value的元素


      图片.png

    rpoplpush

    图片.png

    存储set

    概述

    图片.png

    常用命令

    存储和添加元素

    • sadd key values[value1,value2...]:向set中添加数据,如果key的值已经有则不会重复添加


      图片.png
    • srem key members[member1、member2]:删除set中指定的member


      图片.png

    获得集合中的元素

    • smembers key:获取set中的所有成员


      图片.png
    • sismember key member:判断参数中指定的成员是否在该set中,1表示存在 0表示不存在或key本身就不存在


      图片.png

    集合的差运算 A-B

    • sdiff key1 key2:返回key1 与 key2中相差的成员,与key的顺序有关,返回差集


      图片.png
    图片.png

    集合的交集运算

    • sinter key1 key2 key3.... 返回交集


      图片.png
      图片.png

    集合的并集运算

    • sunion key1 key2 key3 ....返回并集


      图片.png

    扩展命令

    • scard key 获取set中成员的数量


      图片.png
    • srandmember key: 随机返回set中的一个成员


      图片.png
    • sdiffstore destination key1,key2...将key1,key2相差的成员存储在destination上


      图片.png
    • sinterstore destination key[key] 将返回的交集存储在destination上


      图片.png
    • sunionstore destination key[key] 将返回的并集存储在destination上


      图片.png

    sortedset

    概述

    图片.png

    常用命令

    添加元素

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


      图片.png

    获得元素

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


      图片.png
    • zcard key 获取集合中的成员数量


      图片.png

    删除元素

    • zrem key member[member...] 移除集合中指定的成员,可以指定多个成员


      图片.png

    范围查询

    • zrange key start end [withscores] 获取集合中角标为start-end的成员,withscores参数表明返回的成员包含其分数


      图片.png
    • zrevrange key start stop [withscores]:按照元素分数从大到小的顺序返回索引从start到stop之间的所有元素,包含两端的元素


      图片.png
    • zremrangebyrank key start stop:按照排名范围删除元素


      图片.png

    其他命令

    图片.png

    keys的通用操作

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


      图片.png
    • del key1 key2...删除指定的key

    • exists key 判断该key是否存在 1存在 0不存在


      图片.png
    • rename key newkey 为指定的key重命名为newkey

    • expire key 设置过期时间 单位:秒

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

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

    Redis特性

    Redis多数据库

    概念

    一个Redis实例可以包括多个数据库,客户端可以指定连接某个redis实例的哪个数据库,就好比一个mysql钟创建多个数据库,客户端连接时指定连接哪个数据库
    一个redis实例最多可提供16个数据库,下标从0到15 客户端从默认连接第0号数据库,也可通过select选择连接哪个数据库


    图片.png

    newkey移植到1号库

    图片.png

    消息订阅与发布

    图片.png 图片.png 图片.png

    Redis事物

    图片.png

    命令

    图片.png
    图片.png 图片.png 图片.png 图片.png

    Redis持久化

    图片.png 图片.png 图片.png
    图片.png 图片.png 图片.png 图片.png 图片.png 图片.png 图片.png

    相关文章

      网友评论

        本文标题:JAVAEE——Redis数据库

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