Redis入门学习

mac2022-06-30  23

前言:

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

 

 

 

 

转载于:https://www.cnblogs.com/yanduanduan/p/6530426.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)