NoSQL实现(1)——Redis

各种NoSQL数据库都有着如下几个特性:

  1. 不使用关系模型
  2. 在集群中运行良好
  3. 开源
  4. 无模式
  5. 适用于21世纪互联网公司
这次将结合自己的实践,来说明三种不同类型的NoSQL数据库


键值数据库——Redis

键值数据库是最简单的NoSQL数据库。客户端可以根据键查询值,设置键所对应的值以及删除键值对。

在项目中引入依赖之后,在application.properties配置文件中添加redis配置信息

spring.redis.database=0
spring.redis.host= 127.0.0.1
spring.redis.port=6379
spring.redis.password=
spring.redis.jedis.pool.max-idle=8
spring.redis.jedis.pool.min-idle=0
spring.redis.jedis.pool.max-active=8
spring.redis.jedis.pool.max-wait=-1ms
spring.redis.timeout=30000ms
复制代码
  1. 首先是一个最简单的存储,在config类中新建一个RedisTemplate,它规定了存储的key为string型,value为object型
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory factory){
        RedisTemplate redisTemplate = new RedisTemplate<String,Object>();
        redisTemplate.setConnectionFactory(factory);
        return redisTemplate;
    }复制代码
  2. 接着在Test中进行测试,可以看到控制台打印出“value”
    @Test
    public void test() {
       redisTemplate.opsForValue().set("key","value");
       System.out.println(redisTemplate.opsForValue().get("key"));
    }复制代码
  3. 接下来在config中配置HashOperations
    @Bean
    public HashOperations hashOperations(RedisTemplate redisTemplate){
        return  redisTemplate.opsForHash();
    }复制代码
  4. 创建一个 RedisService,将HashOperations实例化后用它来对存入数据库的哈希表进行操作
    @Service
    public class RedisService {
        @Autowired
        RedisTemplate<String,Object> redisTemplate;
        @Autowired
        HashOperations<String,String,Object> hashOperations;
    
        public void set(String key,String hashKey,Object value){
            hashOperations.put(key,hashKey,value);
        }
    
        public Object get(String key,String hashKey){
            return hashOperations.get(key,hashKey);
        }
    
        public void delete(String key,String hashKey){
            hashOperations.delete(key,hashKey);
        }
    
        public Object getAll(String key){
            return hashOperations.entries(key);
        }
    }复制代码
  5. 创建一个Controller类来响应不同的操作,启动项目之后在浏览器中输入“localhost:8080/add”以及“localhost:8080/getAll"能看到插入成功的提示以及刚刚插入如的数据,用命令行打开客户端输入”HKEYS 1 “也能显示1 中的字段
        @RequestMapping(value = "/add", method = RequestMethod.GET)
        @ResponseBody
        public void test(){
            String key = "1";
            user.setId(key);user.setName("A");user.setAge("22");
            service.set(user.getId(),"name",user.getName());
            service.set(user.getId(),"age",user.getAge());
    
            key = "2";user.setId(key);user.setName("B");user.setAge("23");
            service.set(user.getId(),"name",user.getName());
            service.set(user.getId(),"age",user.getAge());
    
            System.out.println("add success end...");
        }
    
        @RequestMapping(value = "/getAll", method = RequestMethod.GET)
        @ResponseBody
        public Object getAll(){
            return  service.getAll("1");
        }复制代码

在整个过程中因为之前默认的序列化存放之后发现是乱码且不便于客户端命令行直接查看,所以在Config里替换了默认的序列化key 和value 的对象:

redisTemplate.setConnectionFactory(factory);
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());复制代码

Redis发布订阅

首先需要进行配置,在Config文件中初始化监听器,并配置适配器绑定订阅频道,创建监听到消息之后的执行方法。

@Bean
RedisMessageListenerContainer container(RedisConnectionFactory factory,MessageListenerAdapter adapter){
    RedisMessageListenerContainer container = new RedisMessageListenerContainer();
    container.setConnectionFactory(factory);
    container.addMessageListener(adapter,new PatternTopic("chat"));
    return container;
}

@Bean
MessageListenerAdapter listenerAdapter(RedisReceiver receiver){
    return new MessageListenerAdapter(receiver,"receiveMessage");
}复制代码

接着创建负责接收消息的接收者,并规定它接收到消息之后所需要执行的操作。

@Component
public class RedisReceiver {
    public void receiveMessage(String message) {
        System.out.println("Received:<"+message+">");
    }
}复制代码

最后在Main函数里,需要实例化StringRedisTemplate,让它发布消息。项目启动之后,就能在控制台看到负责接收的Receiver类打印出相应的信息了。

public static void main(String[] args) {
    ApplicationContext context = SpringApplication.run(RedispsApplication.class,args);
    StringRedisTemplate redisTemplate = context.getBean(StringRedisTemplate.class);
    redisTemplate.convertAndSend("chat","From Redis");
    System.out.println("Send Success");
}复制代码



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值