zoukankan      html  css  js  c++  java
  • Redis使用

    NoSQL特点:

      在大数据存取上具备关系型数据库无法比拟的性能优势:

      1.易扩展

        NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。

      2.大数据量,高性能

        NoSQL 数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。

      3.灵活的数据模型

        NoSQL 无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。这点在大数据量的Web2.0时代尤其明显。

      4.高可用

        NoSQL 在不太影响性能的情况,就可以方便的实现高可用的架构。

      综上所述,NoSQL的非关系特性使其成为了后Web2.0时代的宠儿,助力大型Web2.0网站的再次起飞。是一项全新的数据库革命性运动。

    1.什么是Redis?

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

      1.字符串类型

      2.散列类型

      3.列表类型

      4.集合类型

      5.有序集合类型

    2.Redis的应用场景

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

      2.聊天室的在线好友列表

      3.任务队列(秒杀、抢购、12306等等)

      4.应用排行榜

      5.网站访问统计

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

      7.分布式集群架构中的session分离

    *************************************************************

    1.Redis在Linux上的安装

      1)安装redis编译的c环境,yum install gcc-c++

        注意:linux需联网

      2)将redis-2.6.16.tar.gz上传到Linux系统中

      3)解压到/usr/local下  tar -xvf redis-2.6.16.tar.gz -C /usr/local

      4)进入redis-3.0.0目录 使用make命令编译redis

      

      5)在redis-2.6.16目录中 使用make PREFIX=/usr/local/redis install命令安装 redis到/usr/local/redis中

      

      6)运行Redis

      

      

      7)Redis启动以后,操作Redis的方法(启动后看到如上欢迎页面,但此窗口不能关闭,窗口关闭就认为redis也关闭了(类 Tomcat通过bin下的startup.bat的方式)):

        1.在SSH Scure 上重新开启一个客户端:

         启动Redis的客户端——前端启动模式:

        

        启动Redis的客户端——后端启动模式:

        

          redis.conf文件中的daemonize从no修改成yes表示后台启动

           

          

          至此,Redis安装完成。

          注意:如需远程连接redis,需配置redis端口6379在linux防火墙中开发

             /sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT

               /etc/rc.d/init.d/iptables save

    *********************************************************************************************************

    1.通过java操作linux中的Redis

    需要导包:

      

    package com.itheima.jedis;
    
    import org.junit.Test;
    
    import redis.clients.jedis.Jedis;
    public class JedisTest {
        //通过java程序访问Redis数据库    
        @Test
        //获得单一的jedis
        public void test1(){
            //1.获得连接对象
            Jedis jedis = new Jedis("192.168.16.128", 6379);
            jedis.set("username", "lisi");
            //2.获得数据
            String username = jedis.get("username");
            System.out.println(username);    
        }
    }

      运行结果:

        

     例子:通过jedis 的pool获得jedis连接对象

    //通过jedis 的pool获得jedis连接对象
        @Test
        public void test2(){
            //0.创建池子的配置对象
            JedisPoolConfig poolConfig = new JedisPoolConfig();
            poolConfig.setMaxIdle(30);//最大闲置个数
            poolConfig.setMinIdle(10);//最小闲置个数
            poolConfig.setMaxTotal(50);//最大连接数
            
            //1.创建一个Redis的连接池
            JedisPool pool = new JedisPool(poolConfig, "192.168.16.128", 6379);
            //2.从池子中获取Redis的连接资源
            Jedis jedis = pool.getResource();
            //3.操作数据库
            jedis.set("xxx", "yyy");
            System.out.println(jedis.get("xxx"));
            //4.关闭资源
            jedis.close();
        }

      运行结果:

        

    封装jedis工具:

    package com.itheima.jedis;
    
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;
    
    public class JedisPoolUtils {
        
        private static JedisPool pool=null;
        
        static{
            //0.创建池子的配置对象
            JedisPoolConfig poolConfig = new JedisPoolConfig();
            poolConfig.setMaxIdle(30);//最大闲置个数
            poolConfig.setMinIdle(10);//最小闲置个数
            poolConfig.setMaxTotal(50);//最大连接数
            //1.创建一个Redis的连接池
             pool = new JedisPool(poolConfig, "192.168.16.128", 6379);
        }
        
        //获得jedis资源的方法
        public static Jedis getJedis(){
            return pool.getResource(); 
        }
        //测试
        public static void main(String[] args){
            Jedis jedis = getJedis();
            System.out.println(jedis.get("xxx"));
        }
    }

    测试结果:

      

     通过properties封装jedis:

    配置文件:

    redis.maxIdle=30
    redis.minIdle=10
    redis.maxTotal=100
    redis.url=192.168.128
    redis.port=6379
    package com.itheima.jedis;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;
    
    public class JedisPoolUtils2 {
        
        private static JedisPool pool = null;
        
        static{
            
            //加载配置文件
            InputStream in = JedisPoolUtils2.class.getClassLoader().getResourceAsStream("redis.properties");
            Properties pro = new Properties();
            try {
                pro.load(in);
            } catch (IOException e) {
                e.printStackTrace();
            }
            
            //获得池子对象
            JedisPoolConfig poolConfig = new JedisPoolConfig();
            poolConfig.setMaxIdle(Integer.parseInt(pro.get("redis.maxIdle").toString()));//最大闲置个数
            poolConfig.setMinIdle(Integer.parseInt(pro.get("redis.minIdle").toString()));//最小闲置个数
            poolConfig.setMaxTotal(Integer.parseInt(pro.get("redis.maxTotal").toString()));//最大连接数
            pool = new JedisPool(poolConfig,pro.getProperty("redis.url") , Integer.parseInt(pro.get("redis.port").toString()));
        
            
            //1.创建一个Redis的连接池
             pool = new JedisPool(poolConfig, "192.168.16.128", 6379);
        
        }
    
        //获得jedis资源的方法
        public static Jedis getJedis(){
            return pool.getResource();
        }
        
        public static void main(String[] args) {
            Jedis jedis = getJedis();
            System.out.println(jedis.get("xxx"));
        }
        
        
        
        
    }

    运行结果:

      

    ********************************************************************************************

    1.Redis数据结构:

      Redis是一种高级的key-value 的存储系统,其中value支持5种数据类型:

        1.字符串(String)

        2.哈希(hash)

        3.字符串列表(list)

        4.字符串集合(set)

        5.有序字符串集合(sorted set)

      注意:(关于key的定义)

        1.key不要太长,最好不要超过1024个字节,这不仅会消耗内存还会降低查找效率;

        2.key不要太短,如果太短会降低key的可读性;

        3.在项目中,key最好有一个统一的命名规范;

     1> 存储字符串string

      1) set key value

      2) get key

     2> 存储hash

      

      1)hset key field value :为指定的key 设定 field/value 对(键值对);

      2)hgetall key :获取key 中的所有 filed-value ;

      3)hget key field :返回指定的key中 field 的值;

      4)hmset key fields :设置key中的多个filed/value ;

      5)hmget key fields :获取key中的多个field 的值;

      6)hexists key field :判断指定的key中的field 是否存在;

      7)hlen key :获取key 所包含的field 的数量;

      8)hincrby key field increment :设置key 中 field 的值增加increment;

     *******************************************************************************************************

    Redis特性:

      1.多数据库

        一个Redis实例可以包括多个数据库,客户端可以指定连接某个Redis实例的哪个数据库,就好比一个MySQL中创建多个数据库,客户端连接时指定连接哪个数据库。

        一个Redis实例最多可提供16个数据库,下标从0到15,客户端默认连接第0号数据库,也可以通过select选择连接哪个数据库,如下连接1号库:

      

     连接0号库:

      

      2.将newkey 移植到1号库

        move newkey 1 :将当前库的key移植到1号库中

        

       2.Redis持久化

        1.RDB持久化(默认)

         该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘;

        2.AOF持久化

         该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。

  • 相关阅读:
    垃圾回收机制,正则模块
    日常模块
    文件路径带有字符串的处理方法
    QT进制之间的相互转换
    4-7 selectors模块
    4-5 异步IO模型
    4-4 多路复用IO模型
    4-3 非阻塞IO
    4-2 阻塞IO
    4-1 IO模型介绍
  • 原文地址:https://www.cnblogs.com/chengshun/p/9758416.html
Copyright © 2011-2022 走看看