Redis实现的数据库事务机制(Redis类似数据库事务) (redis是干嘛的)

技术教程 2025-05-13 09:37:27 浏览
redis是干嘛的

Redis实现的数据库事务机制

Redis是一种高效的键值存储数据库,支持多种数据结构和操作命令,包括事务机制。数据库事务机制确保一组关联的命令在同一事务中一起执行,而且这些命令要么全部执行完成,要么全部不执行。本文探讨Redis实现的数据库事务机制及其应用。

Redis事务机制的原理

Redis通过MULTI、EXEC、DISCARD和WATCH命令实现事务机制。MULTI命令用于开启一个事务,EXEC命令用于提交事务,DISCARD命令用于终止事务,WATCH命令用于监视键的变化情况。可以配合使用多个Redis命令来实现一个事务,只要这些命令都在MULTI和EXEC命令之间执行即可,如下面的示例代码:

MULTISET key1 value1SET key2 value2EXEC

以上代码表示在执行SET key1 value1和SET key2 value2之前开启了一个事务,在EXEC命令之后提交了这个事务。如果其中一个命令执行失败,则整个事务将会回滚。

Redis事务机制的应用

Redis事务机制可以用于批量操作和数据一致性的维护,下面举几个具体例子。

批量操作

如果有多个Redis命令需要执行,而这些命令需要执行完成后再执行其他操作,那么可以开启一个事务,将这些命令放入事务中执行,以保证这些命令按照特定的顺序一起执行完成。例如可以通过以下代码添加多个键值对:

MULTISET key1 value1SET key2 value2SET key3 value3EXEC

数据一致性的维护

在修改Redis中的某些键值对时,需要同时修改多个键值对以保证数据的一致性。例如下面的示例代码:

MULTISET balance 1000SET source_account_balance ($source_account_balance- $transfer_amount)SET target_account_balance ($target_account_balance+ $transfer_amount)EXEC

以上代码表示在银行转账的场景中,开启了一个事务,分别修改余额表和两个账户的余额。在事务提交之前如果任何一个命令执行失败,整个事务将会回滚,保证数据的一致性。

WATCH命令

除了MULTI、EXEC和DISCARD命令之外,Redis的事务机制还支持WATCH命令。WATCH命令可以监视一个或多个Redis键,如果这些键在事务执行期间被其他客户端修改,则当前事务将会被回滚。这样就可以确保多个客户端同时对同一个键进行修改时只有一个客户端能够成功执行,其他客户端需要重新尝试修改。例如下面的示例代码:

WATCH key1 key2MULTISET key1 value1SET key2 value2EXEC

以上代码表示在修改key1和key2的值之前先监视这两个键,保证在事务执行期间这两个键没有被修改,如果被修改则事务会自动回滚。

结论

Redis的事务机制通过MULTI、EXEC、DISCARD和WATCH命令实现,支持批量操作和数据一致性的维护,是保证数据的强一致性和高并发访问的重要工具之一。适当运用Redis的事务机制能够提高系统的性能和运行稳定性。

香港服务器首选树叶云,2H2G首月10元开通。树叶云(www.IDC.Net)提供简单好用,价格厚道的香港/美国云 服务器 和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。


什么是hibernate中的二级缓存

在向大家详细介绍Hibernate二级缓存之前,首先让大家了解下一级缓存,然后全面介绍Hibernate二级缓存。 Hibernate中提供了两级Cache,第一级别的缓存是Session级别的缓存,它是属于事务范围的缓存。 这一级别的缓存由hibernate管理的,一般情况下无需进行干预;第二级别的缓存是SessionFactory级别的缓存,它是属于进程范围或群集范围的缓存。 这一级别的缓存可以进行配置和更改,并且可以动态加载和卸载。 Hibernate还为查询结果提供了一个查询缓存,它依赖于第二级缓存。 一. 一级缓存和二级缓存的比较: 第一级缓存 第二级缓存 存放数据的形式相互关联的持久化对象 对象的散装数据 缓存的范围事务范围,每个事务都有单独的第一级缓存进程范围或集群范围,缓存被同一个进程或集群范围内的所有事务共享并发访问策略由于每个事务都拥有单独的第一级缓存,不会出现并发问题,无需提供并发访问策略由于多个事务会同时访问第二级缓存中相同数据,因此必须提供适当的并发访问策略,来保证特定的事务隔离级别数据过期策略没有提供数据过期策略。 处于一级缓存中的对象永远不会过期,除非应用程序显式清空缓存或者清除特定的对象必须提供数据过期策略,如基于内存的缓存中的对象的最大数目,允许对象处于缓存中的最长时间,以及允许对象处于缓存中的最长空闲时间物理存储介质内存内存和硬盘。 对象的散装数据首先存放在基于内存的缓存中,当内存中对象的数目达到数据过期策略中指定上限时,就会把其余的对象写入基于硬盘的缓存中。 缓存的软件实现在Hibernate的Session的实现中包含了缓存的实现由第三方提供,Hibernate仅提供了缓存适配器(CacheProvider)。 用于把特定的缓存插件集成到Hibernate中。 启用缓存的方式只要应用程序通过Session接口来执行保存、更新、删除、加载和查询数据库数据的操作,Hibernate就会启用第一级缓存,把数据库中的数据以对象的形式拷贝到缓存中,对于批量更新和批量删除操作,如果不希望启用第一级缓存,可以绕过Hibernate API,直接通过JDBC API来执行指操作。 用户可以在单个类或类的单个集合的粒度上配置第二级缓存。 如果类的实例被经常读但很少被修改,就可以考虑使用第二级缓存。 只有为某个类或集合配置了第二级缓存,Hibernate在运行时才会把它的实例加入到第二级缓存中。 用户管理缓存的方式第一级缓存的物理介质为内存,由于内存容量有限,必须通过恰当的检索策略和检索方式来限制加载对象的数目。 Session的 evit()方法可以显式清空缓存中特定对象,但这种方法不值得推荐。 第二级缓存的物理介质可以是内存和硬盘,因此第二级缓存可以存放大量的数据,数据过期策略的maxElementsInMemory属性值可以控制内存中的对象数目。 管理第二级缓存主要包括两个方面:选择需要使用第二级缓存的持久类,设置合适的并发访问策略:选择缓存适配器,设置合适的数据过期策略。 二. 一级缓存的管理: 当应用程序调用Session的save()、update()、savaeOrUpdate()、get()或load(),以及调用查询接口的 list()、iterate()或filter()方法时,如果在Session缓存中还不存在相应的对象,Hibernate就会把该对象加入到第一级缓存中。 当清理缓存时,Hibernate会根据缓存中对象的状态变化来同步更新数据库。 Session为应用程序提供了两个管理缓存的方法: evict(Object obj):从缓存中清除参数指定的持久化对象。 clear():清空缓存中所有持久化对象。 三. Hibernate二级缓存的管理: 1. Hibernate二级缓存策略的一般过程如下: 1) 条件查询的时候,总是发出一条select * from table_name where …. (选择所有字段)这样的SQL语句查询数据库,一次获得所有的数据对象。 2) 把获得的所有数据对象根据ID放入到第二级缓存中。 3) 当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;查不到,再查询数据库,把结果按照ID放入到缓存。 4) 删除、更新、增加数据的时候,同时更新缓存。 Hibernate二级缓存策略,是针对于ID查询的缓存策略,对于条件查询则毫无作用。 为此,Hibernate提供了针对条件查询的Query Cache。 2. 什么样的数据适合存放到第二级缓存中? 1) 很少被修改的数据 2) 不是很重要的数据,允许出现偶尔并发的数据 3) 不会被并发访问的数据 4) 参考数据,指的是供应用参考的常量数据,它的实例数目有限,它的实例会被许多其他类的实例引用,实例极少或者从来不会被修改。 3. 不适合存放到第二级缓存的数据? 1) 经常被修改的数据 2) 财务数据,绝对不允许出现并发 3) 与其他应用共享的数据。 4. 常用的缓存插件 Hibernater二级缓存是一个插件,下面是几种常用的缓存插件: ◆EhCache:可作为进程范围的缓存,存放数据的物理介质可以是内存或硬盘,对Hibernate的查询缓存提供了支持。 ◆OSCache:可作为进程范围的缓存,存放数据的物理介质可以是内存或硬盘,提供了丰富的缓存数据过期策略,对Hibernate的查询缓存提供了支持。 ◆SwarmCache:可作为群集范围内的缓存,但不支持Hibernate的查询缓存。 ◆JBossCache:可作为群集范围内的缓存,支持事务型并发访问策略,对Hibernate的查询缓存提供了支持。 5. 配置Hibernate二级缓存的主要步骤: 1) 选择需要使用二级缓存的持久化类,设置它的命名缓存的并发访问策略。 这是最值得认真考虑的步骤。 2) 选择合适的缓存插件,然后编辑该插件的配置文件。

在Java中什么是EJB

EJB (Enterprise JavaBean)是J2EE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。 其特点包括网络服务支持和核心开发工具(SDK)。 在J2EE里,Enterprise Java Beans(EJB)称为Java 企业Bean,是Java的核心代码,分别是会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。 Bean用于实现业务逻辑,它可以是有状态的,也可以是无状态的。 每当客户端请求时,容器就会选择一个Session Bean来为客户端服务。 Session Bean可以直接访问数据库,但更多时候,它会通过Entity Bean实现数据访问。 Bean是域模型对象,用于实现O/R映射,负责将数据库中的表记录映射为内存中的Entity对象,事实上,创建一个Entity Bean对象相当于新建一条记录,删除一个Entity Bean会同时从数据库中删除对应记录,修改一个Entity Bean时,容器会自动将Entity Bean的状态和数据库同步。 Bean是EJB2.0中引入的新的企业Bean,它基于JMS消息,只能接收客户端发送的JMS消息然后处理。 MDB实际上是一个异步的无状态Session Bean,客户端调用MDB后无需等待,立刻返回,MDB将异步处理客户请求。 这适合于需要异步处理请求的场合,比如订单处理,这样就能避免客户端长时间的等待一个方法调用直到返回结果。 EJB实际上是SUN的J2EE中的一套规范,并且规定了一系列的API用来实现把EJB概念转换成EJB产品是BEANS,BEANS是什么概念,那就是得有一个容纳她,让她可劲造腾的地方,就是得有容器必须生存在EJB容器中.这个容器可是功能强大之极!她首先要包装你BEAN,EJB的客户程序实际上从来就不和你编写的EJB直接打交道,他们之间是通过HOME/REMOTE接口来发生关系的.它负责你的BEAN的所有的吃喝拉萨睡,比如BEAN的持续化,安全性,事务管理...

用友通服务无法启动.

答:用友通服务启动过程中此提示比较常见,出错原因情况较多,一般通过分析用友通日志文件(system32\)来确定问题所在,常见情况如下:

情况1:日志文件记录:[2008.6.13 11:36:26]不能找到UFSystem或Account表库,可能是安装没有正常完成,或没有进行初始化,请运行行系统管理进行安装后的初始化。

分析:由提示信息得知还未创建用友通系统数据库UFSystem,可通过查看企业管理器等数据库工具来查看是否存在UFSystem数据库,此系统数据库是安装用友通产品后第一次登录系统管理或重启计算机后自动创建系统数据库和演示账套过程中建立,启动用友通服务报此错误,很有可能还未登录系统管理或执行初始化操作,也可能执行过程中失败。解决:方法1:执行系统管理,做初始化操作方法2:若方法1未执行初始化,可能是这前做过初始化,删除注册表项:[HKEY_LOCAL_MacHINE\SOFTWARE\UFSoft\UF2000\2.0\Setup],再登录系统管理做初始化操作方法3:若初始化操作建立系统数据库操作失败,可手工建立此系统数据库,还原用友通安装目录\Admin\ 文件,还原时数据库名称定义为UFSystem

情况2:[2008.6.14 9:55:33]PROVIDER=SQLOLEDB;DATA SOURCE=用友通-UFIDA;USER ID=SAASSWORD=…[2008.6.14 9:55:33]不能连接到SQL Server,可能是口令不正确。

分析:由提示得知是由于连接数据库失败,一般是指数据库口令问题,用友通服务调用的是系统管理设置SA的口令,一般查看系统管理能否正常运行,系统管理运行提示SA口令见[系统管理]页解决:配置SQL口令,正常运行系统管理, 操作见[系统管理]页

情况3:[2008.6.14 15:16:53]接收信息出错。 ……[2008.6.14 15:17:1]不能装订接口。

分析:提示中的接口可以理解为端口,用友通产品端口是4630,SQLServer默认端口是1433,日志中记录不能装订接口,很可能是产品端口被禁用或被别的占用,被禁用一般是由于防火墙引起,包括杀毒软件自带防火墙或XP2系统防火墙,被占用可能是别的应用软件需要调动自身端口或临时动态端口,导致4630端口不能被用友通服务正常调用。在DOS下用命令查看服务器端口开放情况,命令为:netstat –a –n,正常情况TCP协议类型4630端口状态为LISTENING

在服务器或客户端DOS下用命令查看服务器端口连接,命令为:telnet Ip地址 端口号(如4630),如果正常连接会跳出空白界面,如下图

如连接失败会提示:正在连接到机器名…不能打开到主机的连接,在端口4630:连接失败

解决:若检测端口确实有异常,可查看机器网络环境或防火墙配置情况,关于防火墙配置请参见[防火墙]页

情况4:提示:“..失败”分析:可能是因为数据访问组件版本不一致解决:安装SQL数据库最新补丁,MSDE用户打MSDE2000SP4补丁包,SQLServer2000用户打SQL Server 2000 SP4补丁包,通网站服务工具栏下载号分别是865和866,此补丁包比较大也可以考虑更新数据访问组件MDAC,通网站可下载MDAC2.7版本,工具号为678

情况5:提示:Server不能装入底层接口SGV

分析:可能是由于用友通服务和版本不兼容所致,用友通服务对应文件是System32\,此文件与当前用友通版本不一致。 原因可能是安装早版本时没卸载干净或打过加密狗方面的补丁引起。 解决:方法1:停止用友通服务,从别的机器上拷贝文件覆盖本机此文件,再启动用友通服务方法2:卸载用友通产品,如果System32\文件还存在,手工删除,再次安装用友通产品

问:财务通版本在WindowsXP环境下用友通服务(UF2000)开机后不能自动启动,需手工启动服务,如何配置做服务开机自动启动?答:在不更换操作系统情况可以通过批命令来实现此功能〖操作步骤〗(以财务通服务:UF2000管理软件为例)1.新建一文本文档,在第一行写入:net start UF2000财务软件 exit,保存退出2.将此文本文档后缀更改为bat后缀,文件名称不限,如更改为:财务通服务启动3.此文件存放于操作系统启动目录下,如:D:\Documents and Settings\peak\「开始」菜单\程序\启动\财务通服务启动

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐