博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NoSQL实现(1)——Redis
阅读量:6424 次
发布时间:2019-06-23

本文共 4019 字,大约阅读时间需要 13 分钟。

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

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

键值数据库——Redis

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

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

spring.redis.database=0spring.redis.host= 127.0.0.1spring.redis.port=6379spring.redis.password=spring.redis.jedis.pool.max-idle=8spring.redis.jedis.pool.min-idle=0spring.redis.jedis.pool.max-active=8spring.redis.jedis.pool.max-wait=-1msspring.redis.timeout=30000ms复制代码
  1. 首先是一个最简单的存储,在config类中新建一个RedisTemplate,它规定了存储的key为string型,value为object型
    @Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory factory){    RedisTemplate redisTemplate = new RedisTemplate
    (); redisTemplate.setConnectionFactory(factory); return redisTemplate;}复制代码
  2. 接着在Test中进行测试,可以看到控制台打印出“value”
    @Testpublic void test() {   redisTemplate.opsForValue().set("key","value");   System.out.println(redisTemplate.opsForValue().get("key"));}复制代码
  3. 接下来在config中配置HashOperations
    @Beanpublic HashOperations hashOperations(RedisTemplate redisTemplate){    return  redisTemplate.opsForHash();}复制代码
  4. 创建一个 RedisService,将HashOperations实例化后用它来对存入数据库的哈希表进行操作
    @Servicepublic class RedisService {    @Autowired    RedisTemplate
    redisTemplate; @Autowired HashOperations
    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文件中初始化监听器,并配置适配器绑定订阅频道,创建监听到消息之后的执行方法。

@BeanRedisMessageListenerContainer container(RedisConnectionFactory factory,MessageListenerAdapter adapter){    RedisMessageListenerContainer container = new RedisMessageListenerContainer();    container.setConnectionFactory(factory);    container.addMessageListener(adapter,new PatternTopic("chat"));    return container;}@BeanMessageListenerAdapter listenerAdapter(RedisReceiver receiver){    return new MessageListenerAdapter(receiver,"receiveMessage");}复制代码

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

@Componentpublic 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");}复制代码

转载地址:http://wswga.baihongyu.com/

你可能感兴趣的文章
网关支付、银联代扣通道、快捷支付、银行卡支付分别是怎么样进行支付的?...
查看>>
大数据开发实战:Stream SQL实时开发一
查看>>
C++返回引用的函数例程
查看>>
dll 问题 (转)
查看>>
REST API用得也痛苦
查看>>
test for windows live writer plugins
查看>>
Tiny210 U-BOOT(二)----配置时钟频率基本原理
查看>>
代理模式
查看>>
javaweb学习总结(二十四)——jsp传统标签开发
查看>>
让script的type属性等于text/html
查看>>
linux 文件系统sysvinit 流程分析
查看>>
体素科技:2018年,算法驱动下的医学影像分析进展
查看>>
Vue 折腾记 - (8) 写一个挺靠谱的多地区选择组件
查看>>
VS Code折腾记 - (3) 多图解VSCode基础功能
查看>>
『翻译』Node.js 调试
查看>>
我的iOS开发之路总结(更新啦~)
查看>>
Java NIO之拥抱Path和Files
查看>>
微信原图泄露的只能是 Exif ,你的隐私不在这!!!
查看>>
微信小程序教学第三章(含视频):小程序中级实战教程:列表篇-页面逻辑处理...
查看>>
页面间通信与数据共享解决方案简析
查看>>