Spring Data学习day94:操作Redis和Solr

2019-11-29  本文已影响0人  开源oo柒

一、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.创建整合环境:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
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<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:

查看状态
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:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-solr</artifactId>
        </dependency>
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>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.10.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
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
@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"));
        }
    }
}
添加 示例 示例
上一篇下一篇

猜你喜欢

热点阅读