zoukankan      html  css  js  c++  java
  • Redis入门学习

    前言:

      由于项目中迫切需要先实现将session中的数据放入到redis中,所以我先研究了如何连接redis服务端,并实现存取的操作,至于redis缓存,我过一段时间再补充。

    一、什么是redis

      Redis是基于内存、可持久化的日志型、Key-Value数据库 高性能存储系统,并提供多种语言的API.

    二、为什么要用redis

    • 数据结构(Data Structure)需求越来越多, 但memcache中没有, 影响开发效率
    • 性能需求, 随着读操作的量的上升需要解决,经历的过程有: 
      数据库读写分离(M/S)–>数据库使用多个Slave–>增加Cache (memcache)–>转到Redis
    • 解决写的问题: 
      水平拆分,对表的拆分,将有的用户放在这个表,有的用户放在另外一个表;
    • 可靠性需求 
      Cache的"雪崩"问题让人纠结 
      Cache面临着快速恢复的挑战

    • 开发成本需求 
      Cache和DB的一致性维护成本越来越高(先清理DB, 再清理缓存, 不行啊, 太慢了!) 
      开发需要跟上不断涌入的产品需求 
      硬件成本最贵的就是数据库层面的机器,基本上比前端的机器要贵几倍,主要是IO密集型,很耗硬件;

    • 维护性复杂 
      一致性维护成本越来越高; 
      BerkeleyDB使用B树,会一直写新的,内部不会有文件重新组织;这样会导致文件越来越大;大的时候需要进行文件归档,归档的操作要定期做; 
      这样,就需要有一定的down time;

    三、如何使用redis

      一、安装redis

        安装教程地址:http://www.runoob.com/redis/redis-install.html

      二、相关配置

        更改端口号:

           默认端口为6379,如果linux上该端口被墙了,可以尝试换一个端口。

           cd $REDIS_HOME (进入redis主目录)

    mkdir conf (创建conf目录,用于存放配置)

    cd conf (进入conf目录)

    cp ../redis.conf redis7030.conf (将上级目录下的redis.conf复制到当前目录,并重命名为redis7030.conf)

    vi redis7030.conf (用vi编辑该配置文件)

    找到:

    daemonize no,将no改成yes

    port 7030,将6379改成7030

    然后保存退出

    指定启动、停止命令:

      先停止redis

    ./redis-cli -p 7030 shutdown

    为了以后运维更轻松,可以利用alias做几个别名,

    vi ~/.bashrc

    alias redis="cd /opt/app/redis/redis-2.8.17/src"
    alias startRedis="/opt/app/redis/redis-2.8.17/src/redis-server /opt/app/redis/redis-2.8.17/conf/redis7030.conf"
    alias stopRedis="/opt/app/redis/redis-2.8.17/src/redis-cli -p 7030 shutdown"

    具体路径,大家根据实际情况调整,保存退出,重新连接到linux终端

    redis 即可直接进入redis根目录

    startRedis 即启动redis

    stopRedis 即停止redis

         配置redis密码:

    redis在真实环境中不可以谁想访问就访问,所以,必须要设置密码,修改redis.conf文件配置 

    # requirepass foobared去掉注释,foobared改为自己的密码

     

    三、spring下整个配置redis

      配置文件:    

        <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
            <property name="maxTotal" value="${redis.maxTotal}" />
            <property name="maxIdle" value="${redis.maxIdle}" />
            <property name="maxWaitMillis" value="${redis.maxWait}" />
            <property name="testOnBorrow" value="${redis.testOnBorrow}" />
        </bean>   
    
        <!-- redis的连接池pool,不是必选项:timeout/password -->
        <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
            <constructor-arg index="0" ref="jedisPoolConfig" />
            <constructor-arg index="1" value="${redis.host}" />
            <constructor-arg index="2" value="${redis.port}" type="int" />
            <constructor-arg index="3" value="60000" type="int" />
        </bean>

             maven依赖:

            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>2.4.2</version>
            </dependency>

     

       spring基于注解引用:

        在Controller层或者Service层注入:

          @Autowired
            private JedisPool jedisPool;

        进行存储: 

                  Jedis jedis = jedisPool.getResource();
                  jedis.set("3", "333");

    四、可能遇到的错误    

    Invalid property ‘maxWait’ of bean class [redis.clients.jedis.JedisPoolConfig]: Bean property ‘maxWait’ is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
     
     这说明高版本的jedis中移除了这两个属性
    通过查看确实是这样的

    新版本的jedis中将maxActive改成了maxTotal , MaxWait改成了MaxWaitMillis

    所以poolConfig中向我这样写就可以了

        <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">  
            <property name="maxIdle" value="${redis.maxIdle}" />
            <property name="maxTotal" value="${redis.maxTotal}" />
            <property name="maxWaitMillis" value="${redis.maxWaitMillis}"></property>
            <property name="testOnBorrow" value="${redis.testOnBorrow}" />
        </bean>  

    四、连接服务端exe程序

    redis-desktop-manager-0.8.8.384 

     

     

     

  • 相关阅读:
    JavaScript
    94.Binary Tree Inorder Traversal
    144.Binary Tree Preorder Traversal
    106.Construct Binary Tree from Inorder and Postorder Traversal
    105.Construct Binary Tree from Preorder and Inorder Traversal
    90.Subsets II
    78.Subsets
    83.Merge Sorted Array
    80.Remove Duplicates from Sorted Array II
    79.Word Search
  • 原文地址:https://www.cnblogs.com/yanduanduan/p/6530426.html
Copyright © 2011-2022 走看看