美文网首页
Spring Data学习day94:操作Redis和Solr

Spring Data学习day94:操作Redis和Solr

作者: 开源oo柒 | 来源:发表于2019-11-29 19:52 被阅读0次

    一、Spring Data Redis

    Spring Data Redis 是Spring Data 下的一个模块;用于简化对于redis的操作。

    1.Redis的安装:

    (1)安装环境:

    Redis 版本:3.0.0;环境:Linux。

    (2)安装gcc编译器:

    执行命令:yum install gcc-c++

    (3)解压安装包:

    执行命令:tar -zxf redis-3.0.0.tar.gz

    (4)进入解压目录进行编译:

    执行命令:cd redis-3.0.0 和 make。

    (5)将Redis安装到指定目录:

    执行命令:make PREFIX=/usr/local/redis install。

    (6)启动Redis:

    前置启动:./redis-server
    建议后置启动:先将 redis.conf 文件拷贝到 redis 的安装目录
    cp redis.conf /usr/local/redis/bin;
    编辑 redis.conf 文件修改:daemonize yes。
    启动: ./redis-server redis.conf。
    查看 redis 进程:ps aux|grep redis。
    关闭后置启动的 Redis:./redis-cli shutdown。

    2.创建整合环境:

    • 添加启动器:


      使用IDEA示例
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
    
    • 修改properties或yml配置文件:
    spring.redis.host=192.168.226.130
    spring.redis.port=6379
    
    • 测试:
    @SpringBootTest
    public class TestRedis {
        @Autowired
        private StringRedisTemplate stringRedisTemplate;
        @Autowired
        private RedisTemplate<String ,Users> redisTemplate;
        //字符串类型
        @Test
        public void TestString() {
            stringRedisTemplate.opsForValue().set("key1","value1");
            String key1 = stringRedisTemplate.opsForValue().get("key1");
            System.out.println(key1);
        }
        //对象类型
        @Test
        public void TestObject2(){
            Users users = new Users();
            users.setId(1);
            users.setName("Dave");
            users.setAge(20);
            redisTemplate.opsForValue().set("users",users);
            Object object = redisTemplate.opsForValue().get("users");
            System.out.println(object);
        }
    }
    
    对象类型出现乱码问题
    • 自定义RedisTemplate解决乱码问题:

    默认RedisTemplate<Object, Object> 使用JDK进行序列化,存储到redis中会出现特殊乱码,我们使用JSON序列化对象后存储。在配置类中为一个对象创建指定的 RedisTemplate 操作redis。

    @Configuration
    public class Config {
    
        @Bean
        public RedisTemplate<String, Users> getRedisTemplate(RedisConnectionFactory factory) {
            RedisTemplate redisTemplate = new RedisTemplate();
            redisTemplate.setConnectionFactory(factory);
            //更改值序列化
            Jackson2JsonRedisSerializer<Users> jackson2Json = new Jackson2JsonRedisSerializer<>(Users.class);
            redisTemplate.setValueSerializer(jackson2Json);//设置value的序列化
            redisTemplate.setHashValueSerializer(jackson2Json);//设置hashval的序列化
            //更改键序列化
            StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
            redisTemplate.setKeySerializer(stringRedisSerializer);
            redisTemplate.setHashKeySerializer(stringRedisSerializer);
            return redisTemplate;
        }
    }
    
    • 测试:
    @SpringBootTest
    public class TestRedis {
        @Autowired
        private StringRedisTemplate stringRedisTemplate;
    
        @Autowired
        private RedisTemplate<String ,Users> redisTemplate;
    
        //字符串类型
        @Test
        public void TestString() {
            stringRedisTemplate.opsForValue().set("key1","value1");
            String key1 = stringRedisTemplate.opsForValue().get("key1");
            System.out.println(key1);
        }
    
        //对象类型
        @Test
        public void TestObject(){
            Users users = new Users();
            users.setId(2);
            users.setName("Dave");
            users.setAge(20);
            redisTemplate.opsForValue().set("user",users);
            Users user = redisTemplate.opsForValue().get("user");
            System.out.println(user);
        }
    }
    

    3. 操作Redis-Cluster:

    查看状态
    • 修改properties配置文件:
    spring.redis.cluster.nodes[0]=192.168.226.130:8001
    spring.redis.cluster.nodes[1]=192.168.226.130:8002
    spring.redis.cluster.nodes[2]=192.168.226.130:8003
    spring.redis.cluster.nodes[3]=192.168.226.130:8004
    spring.redis.cluster.nodes[4]=192.168.226.130:8005
    spring.redis.cluster.nodes[5]=192.168.226.130:8006
    
    • 测试:
    @SpringBootTest
    public class TestRedis {
        @Autowired
        private StringRedisTemplate stringRedisTemplate;
    
        @Autowired
        private RedisTemplate<String ,Users> redisTemplate;
    
        //字符串类型
        @Test
        public void TestString() {
            stringRedisTemplate.opsForValue().set("key1","value1");
            String key1 = stringRedisTemplate.opsForValue().get("key1");
            System.out.println(key1);
        }
    
        //对象类型
        @Test
        public void TestObject(){
            Users users = new Users();
            users.setId(2);
            users.setName("Dave");
            users.setAge(20);
            redisTemplate.opsForValue().set("user",users);
            Users user = redisTemplate.opsForValue().get("user");
            System.out.println(user);
        }
    }
    
    示例

    二、Spring Data Solr

    1.Spring Data Solr:

    • 创建项目:


      IDEA工具创建
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-solr</artifactId>
            </dependency>
    
    • 修改properties配置文件:
    spring.data.solr.host=http://192.168.226.130:8080/solr
    
    • 测试:
    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringBootTest
    public class TestSolr {
        @Autowired
        private SolrClient solrClient;
    
        //添加
        @Test
        public void addSolr()throws Exception{
            //创建SolrInputDocument对象
            SolrInputDocument solrInputFields = new SolrInputDocument();
            solrInputFields.addField("id","01");
            solrInputFields.addField("title","洗脸盆");
    
            SolrInputDocument solrInputFields2 = new SolrInputDocument();
            solrInputFields2.addField("id","02");
            solrInputFields2.addField("title","大号洗脸盆");
            solrClient.add(solrInputFields);
            solrClient.add(solrInputFields2);
            solrClient.commit();
        }
        //查找
        @Test
        public void queryDocument() throws IOException, SolrServerException {
            //创建SolrQuery对象:封装查询条件
            SolrQuery entries = new SolrQuery();
            entries.setQuery("title:洗脸");
            QueryResponse query = solrClient.query(entries);
            SolrDocumentList results = query.getResults();
            long num = results.getNumFound();
            System.out.println("总条数:"+num);
            for (SolrDocument solr:results) {
                System.out.println(solr.get("id"));
                System.out.println(solr.get("title"));
            }
        }
    }
    
    示例

    2.操作SolrCloud集群:

    搭建SolrCloud集群
    启动zookeeper集群。

    示例
    • 修改parent版本:
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.10.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
    • 修改properties文件:
    spring.data.solr.zk-host=192.168.226.130:2181,192.168.226.130:2182,192.168.226.130:2183
    spring.data.solr.defaultCollection=collection2
    
    • 创建cluster配置类:
    @Configuration
    public class ClusterConfiguration {
        @Value("${spring.data.solr.zk-host}")
        private String zkHost;
        @Value("${spring.data.solr.defaultCollection}")
        private String defaultCollection;
    
        @Bean
        public CloudSolrClient getCloudSolrClient(){
            //创建CloudSolrClient对象
            CloudSolrClient cloudSolrClient = new CloudSolrClient(zkHost);
            cloudSolrClient.setDefaultCollection(defaultCollection);
            return cloudSolrClient;
        }
    }
    
    • 测试:
    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringBootTest
    public class TestSolrCloud {
        @Autowired
        private CloudSolrClient cloudSolrClient;
    
        //添加
        @Test
        public void addSolr()throws Exception{
            //创建SolrInputDocument对象
            SolrInputDocument solrInputFields = new SolrInputDocument();
            solrInputFields.addField("id","01");
            solrInputFields.addField("title","JavaEE");
    
            SolrInputDocument solrInputFields2 = new SolrInputDocument();
            solrInputFields2.addField("id","02");
            solrInputFields2.addField("title","JavaSE");
            cloudSolrClient.add(solrInputFields);
            cloudSolrClient.add(solrInputFields2);
            cloudSolrClient.commit();
        }
        //查找
        @Test
        public void queryDocument() throws IOException, SolrServerException {
            //创建SolrQuery对象:封装查询条件
            SolrQuery entries = new SolrQuery();
            entries.setQuery("title:JavaEE");
            QueryResponse query = cloudSolrClient.query(entries);
            SolrDocumentList results = query.getResults();
            long num = results.getNumFound();
            System.out.println("总条数:"+num);
            for (SolrDocument solr:results) {
                System.out.println(solr.get("id"));
                System.out.println(solr.get("title"));
            }
        }
    }
    
    添加 示例 示例

    相关文章

      网友评论

          本文标题:Spring Data学习day94:操作Redis和Solr

          本文链接:https://www.haomeiwen.com/subject/caugwctx.html