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 

     

     

     

  • 相关阅读:
    C#操作配置文件
    IIS的启动与停止命令
    我的SQL里哪个语句占用的CPU最多?
    Redis 安装
    redis启动出错Creating Server TCP listening socket 127.0.0.1:6379: bind: No error
    多线程和异步
    mvc 使用Newtonsoft.Json进行序列化json数据
    深入理解JavaScript Hijacking原理
    C#中的partial class(部分类)
    在ASP.NET MVC中使用DropDownList
  • 原文地址:https://www.cnblogs.com/yanduanduan/p/6530426.html
Copyright © 2011-2022 走看看