博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringData+Redis存储
阅读量:6091 次
发布时间:2019-06-20

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

  hot3.png

1.什么是NoSQL

    这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。常见的key-value数据库比如Redis。

NoSQL的共同特征:

对于NoSQL并没有一个明确的范围和定义,但是他们都普遍存在下面一些共同特征:

  • 不需要预定义模式:不需要事先定义数据模式,预定义表结构。数据中的每条记录都可能有不同的属性和格式。当插入数据时,并不需要预先定义它们的模式。
  • 无共享架构:相对于将所有数据存储的存储区域网络中的全共享架构。NoSQL往往将数据划分后存储在各个本地服务器上。因为从本地磁盘读取数据的性能往往好于通过网络传输读取数据的性能,从而提高了系统的性能。
  • 弹性可扩展:可以在系统运行的时候,动态增加或者删除结点。不需要停机维护,数据可以自动迁移。
  • 分区:相对于将数据存放于同一个节点,NoSQL数据库需要将数据进行分区,将记录分散在多个节点上面。并且通常分区的同时还要做复制。这样既提高了并行性能,又能保证没有单点失效的问题。
  • 异步复制:和RAID存储系统不同的是,NoSQL中的复制,往往是基于日志的异步复制。这样,数据就可以尽快地写入一个节点,而不会被网络传输引起迟延。缺点是并不总是能保证一致性,这样的方式在出现故障的时候,可能会丢失少量的数据。
  • BASE:相对于事务严格的ACID特性,NoSQL数据库保证的是BASE特性。BASE是最终一致性和软事务。
    NoSQL数据库并没有一个统一的架构,两种NoSQL数据库之间的不同,甚至远远超过两种关系型数据库的不同。可以说,NoSQL各有所长,成功的NoSQL必然特别适用于某些场合或者某些应用,在这些场合中会远远胜过关系型数据库和其他的NoSQL。

2. 项目依赖

org.springframework.data
spring-data-redis
1.7.2.RELEASE
org.apache.commons
commons-pool2
2.4.1
redis.clients
jedis
2.8.1
jar
compile

 3. 实体类

package com.jeanselam.pojo;import java.io.Serializable;import java.util.Date;/** * 订单 * @author lin * */public class Order implements Serializable{    /**     *     */}

4. 存储接口

package com.jeanselam.intf;import com.jeanselam.pojo.Order;/** * 临时存储客户未处理订单. * @author lin * */public interface NewOrderDao {		/**	 * 存储新创建订单.	 * @param userId 客户ID	 * @param order 新创建订单信息	 * @throws Exception	 */	public void createOrder(int userId,Order order) throws Exception;		/**	 * 得到客户所有新创建的未处理订单.	 * @param userId 客户ID	 * @return 未处理订单信息列表	 * @throws Exception	 */	public Order[] getNewOrder(int userId) throws Exception;		/**	 * 得到客户的一个未处理的订单.	 * @param userId 客户ID	 * @param orderNum 订单编号	 * @return 未处理订单信息	 * @throws Exception	 */	public Order getUserNewOrder(int userId,String orderNum) throws Exception;		/**	 * 删除一项订单信息.	 * @param userId 客户ID	 * @param orderNum 订单编号	 * @throws Exception	 */	public void deleteOrder(int userId,String orderNum) throws Exception;		/**	 * 清空一个客户的全部订单.	 * @param userId	 * @throws Exception	 */	public void deleteAllOrders(int userId) throws Exception;}

5. DAO组件

package com.jeanselam.dao;import java.util.Set;import org.springframework.data.redis.core.RedisTemplate;import com.jeanselam.intf.NewOrderDao;import com.jeanselam.pojo.Order;public class NewOrderDaoImpl implements NewOrderDao {		private RedisTemplate
redisTemplate;//Redis客户端模板 public RedisTemplate
getRedisTemplate() { return redisTemplate; } public void setRedisTemplate(RedisTemplate
redisTemplate) { this.redisTemplate = redisTemplate; } @Override public void createOrder(int userId, Order order) throws Exception { redisTemplate.opsForHash().put(Integer.toString(userId), order.getNum(), order); } @Override public Order[] getNewOrder(int userId) throws Exception { Set
orderNums = redisTemplate.opsForHash().keys(Integer.toString(userId));//获得所有键值 Order[] orders = new Order[orderNums.size()]; int i = -1; for(Object orderNum : orderNums) { ++i; Order order = (Order) redisTemplate.opsForHash().get(Integer.toString(userId), orderNum); orders[i] = order; } return orders; } @Override public Order getUserNewOrder(int userId, String orderNum) throws Exception { return (Order)redisTemplate.opsForHash().get(Integer.toString(userId),orderNum); } @Override public void deleteOrder(int userId, String orderNum) throws Exception { if(redisTemplate.opsForHash().hasKey(Integer.toString(userId), orderNum)) { //删除订单 redisTemplate.opsForHash().delete(Integer.toString(userId), new Object[]{orderNum}); } } @Override public void deleteAllOrders(int userId) throws Exception { Order[] orders = getNewOrder(userId); if(orders != null && orders.length != 0) { for(Order order : orders) { deleteOrder(userId,order.getNum()); } } }}

6. 配置SpringData

 

 

 

参考:https://qifuguang.me/2015/08/04/[%E6%95%B0%E6%8D%AE%E5%BA%93]NoSQL%E7%AE%80%E4%BB%8B/

转载于:https://my.oschina.net/ChiLin/blog/747128

你可能感兴趣的文章
jquery下removeClass(“oldClassName”).addClass("newClassName")的问题
查看>>
uwsgi ini 设置
查看>>
CF994B Knights of a Polygonal Table 第一道 贪心 set/multiset的用法
查看>>
archer 安装
查看>>
ORA-01033: ORACLE initialization or shutdown in progress
查看>>
二维指针与二维数组研究
查看>>
hiho一下 第三十九周 归并排序求逆序数
查看>>
Subsets and Subsets II (回溯,DFS,组合问题)
查看>>
go语言中的接口interface
查看>>
iOS 无证书真机调试
查看>>
openssl实现公私钥证书生成以及转换
查看>>
[原]把一个简单计算器做成Web自定义控件
查看>>
Uboot分析(四)
查看>>
死锁与活锁的区别,死锁与饥饿的区别
查看>>
Python 爬虫练手项目—酒店信息爬取
查看>>
你还在用notifyDataSetChanged?(首发于安卓巴士)
查看>>
Office 365系列(-)
查看>>
day01 格式化输出和while循环的两个小练习
查看>>
playframework学习笔记2 -- 基本的mvc
查看>>
Find substring with K-1 distinct characters
查看>>