zoukankan      html  css  js  c++  java
  • Redis的介绍及使用实例.

    本文就来讲一下Redis安装的方法和Redis生成主键的优点以及和其他几种方式生成主键的对比. 

    1,Redis安装
    首先将Redis的tar包拷贝到Linux下的根目录


    然后解压到redis文件夹下:(先使用mkdir创建redis文件夹)


    接下来就是解压tar包到redis目录下:

    解压后的目录结构:


    编译: 使用Make命令

    安装:


    安装好之后的目录: 


    6379 下的目录结构:(这个rdb文件时: redis database, 暂时不用管它, 重启后自动生成的)


    bin下的目录结构:


    配置后台运行:(将redis-3.0.0目录下的redis.conf文件拷贝到6379目录下, 使用cp命令)


    编辑redis.conf文件(使用vim 命令编辑,修改daemonize为yes, 意思就是支持后台运行)


    启动redis服务:(启动及停止命令)

    客服端连接服务器:(如果是远程连接: ./bin/redis-cli -h 192.168.200.128 -p 6379)

    命令行演示:


    这样一个redis就启动完成了. 

    2, 使用Redis生成主键的优点及与其他生成主键方式的对比
    Redis生成ID
    当使用数据库来生成ID性能不够要求的时候,我们可以尝试使用Redis来生成ID。这主要依赖于Redis是单线程的,所以也可以用生成全局唯一的ID。可以用Redis的原子操作 INCR和INCRBY来实现。

    可以使用Redis集群来获取更高的吞吐量。假如一个集群中有5台Redis。可以初始化每台Redis的值分别是1,2,3,4,5,然后步长都是5。各个Redis生成的ID为:

    A:1,6,11,16,21

    B:2,7,12,17,22

    C:3,8,13,18,23

    D:4,9,14,19,24

    E:5,10,15,20,25

    这个,随便负载到哪个机确定好,未来很难做修改。但是3-5台服务器基本能够满足器上,都可以获得不同的ID。但是步长和初始值一定需要事先需要了。使用Redis集群也可以方式单点故障的问题。

    另外,比较适合使用Redis来生成每天从0开始的流水号。比如订单号=日期+当日自增长号。可以每天在Redis中生成一个Key,使用INCR进行累加。

    优点:

    1)不依赖于数据库,灵活方便,且性能优于数据库。

    2)数字ID天然排序,对分页或者需要排序的结果很有帮助。

    缺点:

    1)如果系统中没有Redis,还需要引入新的组件,增加系统复杂度。

    2)需要编码和配置的工作量比较大。

    用INT做主键的优点:

        1、需要很小的数据存储空间,仅仅需要4 byte 。

        2、insert和update操作时使用INT的性能比GUID好,所以使用int将会提高应用程序的性能。

        3、index和Join 操作,int的性能最好。

        4、容易记忆。

        5、支持通过函数获取最新的值,如:Scope_Indentity() 。

    使用INT做主键的缺点

        1、如果经常有合并表的操作,就可能会出现主键重复的情况。

        2、使用INT数据范围有限制。如果存在大量的数据,可能会超出INT的取值范围。

        3、很难处理分布式存储的数据表。

    使用GUID做主键的优点:

        1、它是独一无二的。

        2、出现重复的机会少。

        3、适合大量数据中的插入和更新操作。

        4、跨服务器数据合并非常方便。

    使用GUID做主键的缺点:

        1、存储空间大(16 byte),因此它将会占用更多的磁盘大小。

        2、很难记忆。join操作性能比int要低。

        3、没有内置的函数获取最新产生的guid主键。

        4、GUID做主键将会添加到表上的所以其他索引中,因此会降低性能。


    3. 代码中演示使用Redis
    Java接口测试Redis:



    Spring和Redis整合:

    Service层:(ProductServiceIml.java) 

          @Autowired
          private Jedis jedis;

     2     public void insertProduct(Product product){
     3         //商品设置
     4         //ID自增长的方式不好, 在这里使用redis生成id
     5         Long id = jedis.incr("pno");
     6         product.setId(id);
     7         
     8         //设置默认下架
     9         product.setIsShow(false);
    10         //默认不删除
    11         product.setIsDel(false);
    12         //时间
    13         product.setCreateTime(new Date());
    14         
    15         //保存商品, 在mapper.xml中写的是返回自增长的主键id, 然后进行级联保存sku表
    16         //但是product如果已经设置了id 就不会再返回主键id了.
    17         productDao.insertSelective(product);
    18         
    19         //库存 多个
    20         for (String color : product.getColors().split(",")) {
    21             //尺码
    22             for(String size : product.getSizes().split(",")){
    23                 Sku sku = new Sku();
    24                 //商品ID 这个在mapper.xml中设置返回主键id
    25                 sku.setProductId(product.getId());
    26                 //颜色 
    27                 sku.setColorId(Long.parseLong(color));
    28                 //市场价
    29                 sku.setMarketPrice(0f);
    30                 //售价
    31                 sku.setPrice(0f);
    32                 //运费
    33                 sku.setDeliveFee(10f);
    34                 //购买限制
    35                 sku.setUpperLimit(188);
    36                 //尺码
    37                 sku.setSize(size);
    38                 //时间
    39                 sku.setCreateTime(new Date());
    40                 //库存
    41                 sku.setStock(0);
    42                 skuDao.insertSelective(sku);
    43             }
    44         }
    45     }

    看到这个最上面使用了Jdis去调用Redis服务, 然后使用incr对pno(在redis中可以对pno设置值)加1操作. 之前使用的都是自增长ID, 在mapper.xml中insert完成之后自动返回主键id到product中, 在级联保存的时候可以直接使用product.getId(). 下面就来看一下redis与spring整合的配置.




    redis.xml配置文件:

     1 <beans xmlns="http://www.springframework.org/schema/beans"
     2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
     3     xmlns:context="http://www.springframework.org/schema/context"
     4     xmlns:aop="http://www.springframework.org/schema/aop" 
     5     xmlns:tx="http://www.springframework.org/schema/tx"
     6     xmlns:task="http://www.springframework.org/schema/task"
     7     xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
     8     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     9         http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
    10         http://www.springframework.org/schema/mvc 
    11         http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd 
    12         http://www.springframework.org/schema/context 
    13         http://www.springframework.org/schema/context/spring-context-4.0.xsd 
    14         http://www.springframework.org/schema/aop 
    15         http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
    16         http://www.springframework.org/schema/tx 
    17         http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
    18         http://www.springframework.org/schema/task
    19            http://www.springframework.org/schema/task/spring-task-4.0.xsd
    20         http://code.alibabatech.com/schema/dubbo        
    21         http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    22         
    23         <!-- 整合Redis-->
    24         <bean id="jdis" class="redis.clients.jedis.Jedis">
    25             <constructor-arg value="192.168.200.128" index="0" type="java.lang.String"/>
    26             <constructor-arg value="6379" index="1"/>
    27         </bean>        
    28         
    29 </beans>
    View Code


    关于Redis的使用暂时就这么多, 下次还会继续分享更多的内容. 






  • 相关阅读:
    Angular Universal 学习笔记
    SAP Spartacus 如何获得当前渲染页面的 CMS 元数据
    Angular 服务器端渲染的学习笔记(二)
    Angular 服务器端渲染的学习笔记(一)
    第三方外部 Saas提供商如何跟使用 SAP 系统的客户进行对接接口集成
    如何从 SAP Spartacus Product Detail 页面,找到其 Angular 实现 Component 的位置
    具备自动刷新功能的 SAP ABAP ALV 报表
    C++学习目录
    c--条件编译
    c--文件读写--二进制
  • 原文地址:https://www.cnblogs.com/wang-meng/p/5808777.html
Copyright © 2011-2022 走看看