Redis的安装过程及与SSM结合使用

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis的安装过程及与SSM结合使用 Redis安装过程 下载安装包,解压,Mac系统将文件夹放在/usr/local文件夹下 打开终端,先安装服务器端server 终端$ cd /usr/local/redis/ 去文件下进入redis.

Redis的安装过程及与SSM结合使用

Redis安装过程

  1. 下载安装包,解压,Mac系统将文件夹放在/usr/local文件夹下
  2. 打开终端,先安装服务器端server
    终端$ cd /usr/local/redis/
  3. 去文件下进入redis.config文件
    这里写图片描述
    找到requirepass删除前面的#
    并修改后面拼接的密码
    保存
  4. 进入终端
    输入命令
    终端$ cd src/
    终端$ ./redis-server ../redis.conf
    进入redis的服务器端
    Ctrl + c退出

(如果在过程中提示没有权限就在命令前加sudo)

但在使用的过程中不要退出

  1. 再开启一个终端,安装客户端试用
    命令
    终端$ cd /usr/local/redis/src/
    终端$ ./redis-cli -a 密码
    就进入到了redis的客户端

操作redis客户端的命令
这里写图片描述
前面的是ip地址:端口号
keys * 查询所有的key
这里写图片描述
设置key和value
get name
通过key获取value
flushdb
清除redis内存中的数据,但不建议经常使用,影响服务器的性能
del name
也可以通过key删除数据
exit
退出

redis和SSM结合使用

1.搭建一个SSM的项目,并连接数据库
下面我主要介绍和redis有关的配置
2.创建RedisCache类,这个类是redis的核心

package com.dhl.redis;
// redis缓存
// jedis redis for Java

/**
 * 序列化的是数据
 * 不会序列化类结构
 * 但会序列化关系(数据对应的类结构)
 */

public class RedisCache implements Cache {
    // 基于Redis的MyBatis二级缓存的实现

    // 需要中间类对其进行静态注
    private static JedisConnectionFactory jedisConnectionFactory;

    private final String id;

    private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();


    public static void setJedisConnectionFactory(JedisConnectionFactory jedisConnectionFactory) {
        RedisCache.jedisConnectionFactory = jedisConnectionFactory;
    }

    // 根据标识构造缓存对象
    public RedisCache(String id) {
        if (id == null){
            // 抛出非法参数异常
            throw new IllegalArgumentException("缓存id不能为空");
        }
        this.id = id;
    }
    /**
     * 获取缓存对象的唯一标准
     *
     * @return
     */
    public String getId() {
        return this.id;
    }
    /**
     * 把key/value保存到缓存对象中
     */
    public void putObject(Object key, Object value) {

        JedisConnection jedisConnection = null;
        try {
            //操作readis进行保存
            jedisConnection = (JedisConnection) jedisConnectionFactory.getConnection();


            //创建一个序列化工具
            RedisSerializer<Object> serializer = new JdkSerializationRedisSerializer();

            // 创建连接,保存key的value
            jedisConnection.set(serializer.serialize(key),serializer.serialize(value));
        }catch (JedisConnectionException e){
            e.printStackTrace();
        }finally {
            if (jedisConnection != null){
                jedisConnection.close();
            }
        }

    }

    public Object getObject(Object key) {
        // 通过key从缓存对象中获取value

        Object result = null;
        JedisConnection jedisConnection = null;
        try {
            // 建立连接
            jedisConnection = (JedisConnection) jedisConnectionFactory.getConnection();

            RedisSerializer<Object> serializer= new JdkSerializationRedisSerializer();

            byte[] bytes = jedisConnection.get(serializer.serialize(key));

            // 1. 将key序列化
            // 2. 通过connection获取序列化的value
            // 3. 将序列化的value反序列化

            result = serializer.deserialize(bytes);


            /**
             * 序列化的是数据
             * 不会序列化类结构
             * 但会序列化关系(数据对应的类结构)
             */


        }catch (JedisConnectionException e){
            e.printStackTrace();
        }finally {
            if (jedisConnection != null){
                jedisConnection.close();
            }
        }
        return result;
    }

    /**
     * 不是需要实现的方法,没有被核心框架调用
     * 方法作用: 根据key移除对应的value
     */
    public Object removeObject(Object key) {

        Object result = null;
        JedisConnection jedisConnection = null;
        try {
            // 建立连接
            jedisConnection = (JedisConnection) jedisConnectionFactory.getConnection();

            RedisSerializer<Object> serializer= new JdkSerializationRedisSerializer();

            // 移除保存到的值
            result = jedisConnection.expire(serializer.serialize(key),0);

        }catch (JedisConnectionException e){
            e.printStackTrace();
        }finally {
            if (jedisConnection != null){
                jedisConnection.close();
            }
        }
        return result;
    }

    // 清除缓存(操作影响性能,效率低,不建议经常清除)
    public void clear() {
        JedisConnection jedisConnection = null;
        try {
            jedisConnection = (JedisConnection) jedisConnectionFactory.getConnection();
            // 清除缓存
            jedisConnection.flushDb();
            // 清除设置
            jedisConnection.flushAll();

        }catch (JedisConnectionException e){

        }finally {
            if (jedisConnection != null){
                jedisConnection.close();
            }
        }
    }

    /**
     * 获取缓存对象中存取的key/value的数量
     * @return
     */
    public int getSize() {
        Integer count = 0;
        JedisConnection jedisConnection = null;
        try {
            jedisConnection = (JedisConnection) jedisConnectionFactory.getConnection();

            count = Integer.valueOf(jedisConnection.dbSize().toString());

        }catch (JedisConnectionException e){

        }finally {
            if (jedisConnection != null){
                jedisConnection.close();
            }
        }
        return count;
    }

    // 获取读写锁
    // 从mybatis的3.2.6版本,这个方法不再被框架核心调用
    // 所有需要的锁,都必须由缓存供应商来提供
    public ReadWriteLock getReadWriteLock() {
        return this.readWriteLock;
    }
}

3.创建中间类

package com.lanou.redis;

public class RedisCacheTransfer {

    @Autowired
    public void setJedisConnectionFactory(JedisConnectionFactory jedisConnectionFactory){
        RedisCache.setJedisConnectionFactory(jedisConnectionFactory);
    }
}

4.redis的配置文件—-(1)redis.properties

# Redis的配置
redis.host=127.0.0.1
redis.port=6379
redis.pass=111111

redis.maxIdl=300
redis.maxActive=600
redis.maxWait=1000

5.redis的配置文件—-(2)SSM-redis.xml
这个配置文件也可以和SSM-mybatis.xml配置文件写在一起

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:redis.properties</value>
                <value>classpath:db.properties</value>
            </list>
        </property>
    </bean>

    <!--构建redis的数据源-->
    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxIdle" value="${redis.maxIdl}"/>
        <property name="maxTotal" value="${redis.maxActive}"/>
        <property name="maxWaitMillis" value="${redis.maxWait}"/>
    </bean>

    <bean id="jedisConnectionFactory"
          class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
          p:hostName="${redis.host}" p:port="${redis.port}" p:password="${redis.pass}" p:poolConfig-ref="poolConfig"
    />

    <bean id="redisCacheTranfer" class="com.lanou.redis.RedisCacheTransfer">
        <property name="jedisConnectionFactory" ref="jedisConnectionFactory"/>
    </bean>


</beans>

6.mybatis的配置文件—–mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <settings>
        <!-- Globally enables or disables any caches configured in any mapper under this configuration -->
        <setting name="cacheEnabled" value="true"/>
        <!-- Sets the number of seconds the driver will wait for a response from the database -->
        <setting name="defaultStatementTimeout" value="3000"/>
        <!-- Enables automatic mapping from classic database column names A_COLUMN to camel case classic Java property names aColumn -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!-- Allows JDBC support for generated keys. A compatible driver is required.
        This setting forces generated keys to be used if set to true,
         as some drivers deny compatibility but still work -->
        <setting name="useGeneratedKeys" value="true"/>

        <!--查询的时候,关闭关联对象即使加载,为了提高性能-->
        <setting name="lazyLoadingEnabled" value="false"/>

        <!--允许多个结果集,默认就是true-->
        <setting name="multipleResultSetsEnabled" value="true"/>

        <!--设置关联的对象加载的形态,此处是按需加载字段.不会加载所有的字段,而是有sql来决定-->
        <setting name="aggressiveLazyLoading" value="true"/>


    </settings>

    <!-- Continue going here -->

</configuration>

7.最后不要忘记在web.xml的配置文件中配置SSM-redis.xml

8.可以写查询语句进行测试,运行成功之后我们可以去进入终端,使用redis的客户端,通过key * 可以查到内存中的数据

Redis安装过程

  1. 下载安装包,解压,Mac系统将文件夹放在/usr/local文件夹下
  2. 打开终端,先安装服务器端server
    终端$ cd /usr/local/redis/
  3. 去文件下进入redis.config文件

    找到requirepass删除前面的#
    并修改后面拼接的密码
    保存

  4. 进入终端
    输入命令
    终端$ cd src/
    终端$ ./redis-server ../redis.conf
    进入redis的服务器端
    Ctrl + c退出

(如果在过程中提示没有权限就在命令前加sudo)

但在使用的过程中不要退出

  1. 再开启一个终端,安装客户端试用
    命令
    终端 ./redis-cli -a 密码
    就进入到了redis的客户端

操作redis客户端的命令
*

前面的是ip地址:端口号
keys * 查询所有的key
*

设置key和value
*

通过key获取value
*

清除redis内存中的数据,但不建议经常使用,影响服务器的性能
*

也可以通过key删除数据
*

退出

redis和SSM结合使用

1.搭建一个SSM的项目,并连接数据库
下面我主要介绍和redis有关的配置
2.创建RedisCache类,这个类是redis的核心

package com.dhl.redis;
// redis缓存
// jedis redis for Java

/**
 * 序列化的是数据
 * 不会序列化类结构
 * 但会序列化关系(数据对应的类结构)
 */

public class RedisCache implements Cache {
    // 基于Redis的MyBatis二级缓存的实现

    // 需要中间类对其进行静态注
    private static JedisConnectionFactory jedisConnectionFactory;

    private final String id;

    private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();


    public static void setJedisConnectionFactory(JedisConnectionFactory jedisConnectionFactory) {
        RedisCache.jedisConnectionFactory = jedisConnectionFactory;
    }

    // 根据标识构造缓存对象
    public RedisCache(String id) {
        if (id == null){
            // 抛出非法参数异常
            throw new IllegalArgumentException("缓存id不能为空");
        }
        this.id = id;
    }
    /**
     * 获取缓存对象的唯一标准
     *
     * @return
     */
    public String getId() {
        return this.id;
    }
    /**
     * 把key/value保存到缓存对象中
     */
    public void putObject(Object key, Object value) {

        JedisConnection jedisConnection = null;
        try {
            //操作readis进行保存
            jedisConnection = (JedisConnection) jedisConnectionFactory.getConnection();


            //创建一个序列化工具
            RedisSerializer<Object> serializer = new JdkSerializationRedisSerializer();

            // 创建连接,保存key的value
            jedisConnection.set(serializer.serialize(key),serializer.serialize(value));
        }catch (JedisConnectionException e){
            e.printStackTrace();
        }finally {
            if (jedisConnection != null){
                jedisConnection.close();
            }
        }

    }

    public Object getObject(Object key) {
        // 通过key从缓存对象中获取value

        Object result = null;
        JedisConnection jedisConnection = null;
        try {
            // 建立连接
            jedisConnection = (JedisConnection) jedisConnectionFactory.getConnection();

            RedisSerializer<Object> serializer= new JdkSerializationRedisSerializer();

            byte[] bytes = jedisConnection.get(serializer.serialize(key));

            // 1. 将key序列化
            // 2. 通过connection获取序列化的value
            // 3. 将序列化的value反序列化

            result = serializer.deserialize(bytes);


            /**
             * 序列化的是数据
             * 不会序列化类结构
             * 但会序列化关系(数据对应的类结构)
             */


        }catch (JedisConnectionException e){
            e.printStackTrace();
        }finally {
            if (jedisConnection != null){
                jedisConnection.close();
            }
        }
        return result;
    }

    /**
     * 不是需要实现的方法,没有被核心框架调用
     * 方法作用: 根据key移除对应的value
     */
    public Object removeObject(Object key) {

        Object result = null;
        JedisConnection jedisConnection = null;
        try {
            // 建立连接
            jedisConnection = (JedisConnection) jedisConnectionFactory.getConnection();

            RedisSerializer<Object> serializer= new JdkSerializationRedisSerializer();

            // 移除保存到的值
            result = jedisConnection.expire(serializer.serialize(key),0);

        }catch (JedisConnectionException e){
            e.printStackTrace();
        }finally {
            if (jedisConnection != null){
                jedisConnection.close();
            }
        }
        return result;
    }

    // 清除缓存(操作影响性能,效率低,不建议经常清除)
    public void clear() {
        JedisConnection jedisConnection = null;
        try {
            jedisConnection = (JedisConnection) jedisConnectionFactory.getConnection();
            // 清除缓存
            jedisConnection.flushDb();
            // 清除设置
            jedisConnection.flushAll();

        }catch (JedisConnectionException e){

        }finally {
            if (jedisConnection != null){
                jedisConnection.close();
            }
        }
    }

    /**
     * 获取缓存对象中存取的key/value的数量
     * @return
     */
    public int getSize() {
        Integer count = 0;
        JedisConnection jedisConnection = null;
        try {
            jedisConnection = (JedisConnection) jedisConnectionFactory.getConnection();

            count = Integer.valueOf(jedisConnection.dbSize().toString());

        }catch (JedisConnectionException e){

        }finally {
            if (jedisConnection != null){
                jedisConnection.close();
            }
        }
        return count;
    }

    // 获取读写锁
    // 从mybatis的3.2.6版本,这个方法不再被框架核心调用
    // 所有需要的锁,都必须由缓存供应商来提供
    public ReadWriteLock getReadWriteLock() {
        return this.readWriteLock;
    }
}

3.创建中间类

package com.lanou.redis;

public class RedisCacheTransfer {

    @Autowired
    public void setJedisConnectionFactory(JedisConnectionFactory jedisConnectionFactory){
        RedisCache.setJedisConnectionFactory(jedisConnectionFactory);
    }
}

4.redis的配置文件—-(1)redis.properties

# Redis的配置
redis.host=127.0.0.1
redis.port=6379
redis.pass=111111

redis.maxIdl=300
redis.maxActive=600
redis.maxWait=1000

5.redis的配置文件—-(2)SSM-redis.xml
这个配置文件也可以和SSM-mybatis.xml配置文件写在一起

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:redis.properties</value>
                <value>classpath:db.properties</value>
            </list>
        </property>
    </bean>

    <!--构建redis的数据源-->
    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxIdle" value="${redis.maxIdl}"/>
        <property name="maxTotal" value="${redis.maxActive}"/>
        <property name="maxWaitMillis" value="${redis.maxWait}"/>
    </bean>

    <bean id="jedisConnectionFactory"
          class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
          p:hostName="${redis.host}" p:port="${redis.port}" p:password="${redis.pass}" p:poolConfig-ref="poolConfig"
    />

    <bean id="redisCacheTranfer" class="com.lanou.redis.RedisCacheTransfer">
        <property name="jedisConnectionFactory" ref="jedisConnectionFactory"/>
    </bean>


</beans>

6.mybatis的配置文件—–mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <settings>
        <!-- Globally enables or disables any caches configured in any mapper under this configuration -->
        <setting name="cacheEnabled" value="true"/>
        <!-- Sets the number of seconds the driver will wait for a response from the database -->
        <setting name="defaultStatementTimeout" value="3000"/>
        <!-- Enables automatic mapping from classic database column names A_COLUMN to camel case classic Java property names aColumn -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!-- Allows JDBC support for generated keys. A compatible driver is required.
        This setting forces generated keys to be used if set to true,
         as some drivers deny compatibility but still work -->
        <setting name="useGeneratedKeys" value="true"/>

        <!--查询的时候,关闭关联对象即使加载,为了提高性能-->
        <setting name="lazyLoadingEnabled" value="false"/>

        <!--允许多个结果集,默认就是true-->
        <setting name="multipleResultSetsEnabled" value="true"/>

        <!--设置关联的对象加载的形态,此处是按需加载字段.不会加载所有的字段,而是有sql来决定-->
        <setting name="aggressiveLazyLoading" value="true"/>


    </settings>

    <!-- Continue going here -->

</configuration>

7.最后不要忘记在web.xml的配置文件中配置SSM-redis.xml

8.可以写查询语句进行测试,运行成功之后我们可以去进入终端,使用redis的客户端,通过key * 可以查到内存中的数据

原文地址http://www.bieryun.com/3048.html

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
3月前
|
NoSQL 数据可视化 Redis
Mac安装Redis
Mac安装Redis
77 3
|
1月前
|
NoSQL 数据可视化 Linux
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
本文介绍了Redis的两个可视化管理工具:付费的Redis Desktop Manager和免费的Another Redis DeskTop Manager,包括它们的下载、安装和使用方法,以及在使用Another Redis DeskTop Manager连接Redis时可能遇到的问题和解决方案。
123 1
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
|
21天前
|
存储 SQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(1)作者——LJS[含MySQL的下载、安装、配置详解步骤及报错对应解决方法]
Mysql And Redis基础与进阶操作系列(1)之[MySQL的下载、安装、配置详解步骤及报错对应解决方法]
|
1月前
|
NoSQL Ubuntu Linux
Redis 安装
10月更文挑战第14天
53 1
|
12天前
|
NoSQL 编译器 Linux
【赵渝强老师】Redis的安装与访问
本文基于Redis 6.2版本,详细介绍了在CentOS 7 64位虚拟机环境中部署Redis的步骤。内容包括安装GCC编译器、创建安装目录、解压安装包、编译安装、配置文件修改、启动服务及验证等操作。视频讲解和相关图片帮助理解每一步骤。
|
1月前
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
239 3
|
1月前
|
NoSQL Linux Shell
Redis 的安装与部署(图文)
Redis 的安装与部署(图文)
|
1月前
|
NoSQL Ubuntu Redis
Ubuntu安装redis
本文介绍了在Ubuntu系统上安装Redis的两种方法:一种是通过编译安装本地Redis包,包括下载、解压、编译安装、配置启动和测试连接的步骤;另一种是通过apt安装在线的Redis包,并提供了更新系统软件包列表、安装Redis服务器、检查Redis服务器状态和测试连接的命令。
98 0
Ubuntu安装redis
|
2月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
2月前
|
NoSQL Linux Redis
linux安装单机版redis详细步骤,及python连接redis案例
这篇文章提供了在Linux系统中安装单机版Redis的详细步骤,并展示了如何配置Redis为systemctl启动,以及使用Python连接Redis进行数据操作的案例。
71 2
下一篇
无影云桌面