前言:

  由于项目中迫切需要先实现将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 

 

 

 

 

posted on 2017-03-10 14:07  风又奈何  阅读(264)  评论(0)    收藏  举报