在这里,我们将给大家分享关于何时使用Redis等键/值存储来代替/与SQL数据库一起使用?的知识,让您更了解redis数据什么时候存入数据库的本质,同时也会涉及到如何更有效地DAO与多个数据库一起在S
在这里,我们将给大家分享关于何时使用 Redis 等键/值存储来代替/与 SQL 数据库一起使用?的知识,让您更了解redis数据什么时候存入数据库的本质,同时也会涉及到如何更有效地DAO与多个数据库一起在Spring中无法与Kotlin一起使用、Flask-SQLAlchemy-会话如何与多个数据库一起使用?、FLS vs TLS,我可以使用光纤本地存储来代替TLS吗?、ios – 将多个托管对象上下文与核心数据库一起使用的内容。
本文目录一览:- 何时使用 Redis 等键/值存储来代替/与 SQL 数据库一起使用?(redis数据什么时候存入数据库)
- DAO与多个数据库一起在Spring中无法与Kotlin一起使用
- Flask-SQLAlchemy-会话如何与多个数据库一起使用?
- FLS vs TLS,我可以使用光纤本地存储来代替TLS吗?
- ios – 将多个托管对象上下文与核心数据库一起使用
何时使用 Redis 等键/值存储来代替/与 SQL 数据库一起使用?(redis数据什么时候存入数据库)
我已经阅读了有关键/值存储(例如 Redis)的精彩内容,但我似乎无法弄清楚何时该在应用程序中使用它。
假设我正在构建一个基于 Web 的应用程序;我知道我将为前端、后端、数据库等使用什么堆栈。在哪些情况下我会去“哦,我们还需要 Redis 用于 X、Y 或
Z”。
我会欣赏 node.js 示例以及非 node.js 示例。
答案1
小编典典我似乎无法弄清楚何时该在应用程序中使用它。
我建议您阅读本教程,其中还包含用例。由于 redis
是相当面向内存的,它非常适合经常更新的实时数据,例如会话存储、状态数据库、统计信息、缓存,它的高级数据结构为许多其他场景提供了多功能性。
然而,Redis 并不是经典关系数据库的 NoSQL 替代品,因为它不支持 RDBMS 世界的许多标准功能,例如查询数据可能会减慢速度。替代品是
MongoDB 或 CouchDB 等文档数据库,redis 擅长补充特定功能,其中速度和对高级数据结构的支持派上用场。
DAO与多个数据库一起在Spring中无法与Kotlin一起使用
如何解决DAO与多个数据库一起在Spring中无法与Kotlin一起使用?
我正在和Kotlin学习Spring(启动)。 我设法通过JPA信息库建立了一个可运行的Spring应用程序。
interface APixRepo : org.springframework.data.repository.Repository<APix,EroPixKulcs>
{
@Query( value="select * from felhaszn",nativeQuery = true
)
fun sokasag(): Iterable<APix>
}
@RestController
@RequestMapping("/apix")
class AKontroller(private val dao: APixRepo)
{
@GetMapping("/sokasag")
fun sokasag() = dao.sokasag()
}
其中APix是我的实体类。还有另外两个相似的实体以及仓库和控制器。
(本机sql对我很重要,这是我最多的专家。)
而且由于这三个实体位于三个不同的数据库中,所以我不得不使用描述为here的XxxDataSourceConfiguration魔术(Xxx = APix和另外两个)。
而且仍然有效。
现在我意识到,回购方法对我不利,因为我的sql必须是动态的,并且您只能在@Query(answer)中编写常量sql。 所以我根据this question and answer将我的仓库改成了DAO:
interface APixDAO
{
fun sokasag(): Iterable<APix>
}
class APixRepoImpl constructor(@PersistenceContext var em: EntityManager)
{
fun sokasag(): Iterable<APix>
{
return em.createNativeQuery("select * from felhaszn").getResultList() as Iterable<APix>
}
}
interface APixRepo : org.springframework.data.repository.Repository<APix,EroPixKulcs>,APixDAO {}
现在问题开始了。在这种状态下(没有任何其他注释),错误是这样的:
***************************
APPLICATION Failed TO START
***************************
Description:
Parameter 0 of constructor in com.zz.sokdb.apix.APixRepoImpl required a single bean,but 3 were found:
- org.springframework.orm.jpa.SharedEntityManagerCreator#0: defined by method ''createSharedEntityManager'' in null
- org.springframework.orm.jpa.SharedEntityManagerCreator#1: defined by method ''createSharedEntityManager'' in null
- org.springframework.orm.jpa.SharedEntityManagerCreator#2: defined by method ''createSharedEntityManager'' in null
Action:
Consider marking one of the beans as @Primary,updating the consumer to accept multiple beans,or using @Qualifier to identify the bean that should be consumed
和
ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ''AKontroller'' defined in file [/home/laca/spring/kotlin/zz/sokdb/build/classes/kotlin/main/com/zz/sokdb/AKontroller.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ''APixRepoImpl'' defined in file [/home/laca/spring/kotlin/zz/sokdb/build/classes/kotlin/main/com/zz/sokdb/apix/APixRepoImpl.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoUniqueBeanDeFinitionException: No qualifying bean of type ''javax.persistence.EntityManager'' available: expected single matching bean but found 3: org.springframework.orm.jpa.SharedEntityManagerCreator#0,org.springframework.orm.jpa.SharedEntityManagerCreator#1,org.springframework.orm.jpa.SharedEntityManagerCreator#2
我尝试过:
class AKontroller(@org.springframework.beans.factory.annotation.Qualifier("apixEntityManager") private val dao: APixRepo)
现在出现错误:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ''AKontroller'' defined in file [/home/laca/spring/kotlin/zz/sokdb/build/classes/kotlin/main/com/zz/sokdb/AKontroller.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDeFinitionException: No qualifying bean of type ''com.zz.sokdb.apix.APixRepo'' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Qualifier("apixEntityManager")}
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:797) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:227) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at...
at...
at...
我尝试过:
class APixRepoImpl constructor(@PersistenceContext @org.springframework.beans.factory.annotation.Qualifier("apixEntityManager") var em: EntityManager)
现在出现错误:
***************************
APPLICATION Failed TO START
***************************
Description:
Parameter 0 of constructor in com.zz.sokdb.AKontroller required a single bean,but 3 were found:
- apixEntityManager: defined by method ''apixEntityManager'' in class path resource [com/zz/sokdb/apix/APixDataSourceConfiguration.class]
- eroEntityManager: defined by method ''eroEntityManager'' in class path resource [com/zz/sokdb/ero/EroDataSourceConfiguration.class]
- smpixEntityManager: defined by method ''smpixEntityManager'' in class path resource [com/zz/sokdb/smpix/SMPixDataSourceConfiguration.class]
Action:
Consider marking one of the beans as @Primary,or using @Qualifier to identify the bean that should be consumed
当我在两个地方都尝试注解时,错误就和我只在AKontroller中尝试时一样。
这时我放弃了,请过来寻求帮助。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
Flask-SQLAlchemy-会话如何与多个数据库一起使用?
我正在开发Flask项目,并且正在使用Flask-SQLAlchemy。
我需要使用多个已经存在的数据库。
我创建了“ app”对象和SQLAlchemy对象:
from flask import Flaskfrom flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)db = SQLAlchemy(app)
在配置中,我设置了默认连接和其他绑定:
SQLALCHEMY_DATABASE_URI = ''postgresql://pg_user:pg_pwd@pg_server/pg_db''SQLALCHEMY_BINDS = { ''oracle_bind'': ''oracle://oracle_user:oracle_pwd@oracle_server/oracle_schema'', ''mssql_bind'': ''mssql+pyodbc://msssql_user:mssql_pwd@mssql_server/mssql_schema?driver=FreeTDS''}
然后,我使用声明性系统创建表模型,并在需要时设置 __bind_key__
参数以指示表位于哪个数据库中。
例如:
class MyTable(db.Model): __bind_key__ = ''mssql_bind'' __tablename__ = ''my_table'' id = db.Column(db.Integer, nullable=False, primary_key=True) val = db.Column(db.String(50), nullable=False)
这样,一切正常,当我执行查询时,它是在正确的数据库上进行的。
阅读SQLAlchemy文档和Flask-SQLALchemy文档,我理解这些事情(我将它们写下以检查我是否正确理解):
- 您可以通过会话处理事务。
- 在SQLAlchemy中,您可以将会话与特定引擎绑定。
- Flask-SQLAlchemy在请求开始时自动创建会话(scoped_session),并在请求结束时销毁它
所以我可以做:
record = MyTable(1, ''some text'')db.session.add(record)db.session.commit()
我不明白在Flask-SqlAlchemy中使用多个数据库进行会话时会发生什么。
我验证了系统可以通过__bind_key__
参数正确地将表绑定到正确的数据库,因此,我可以通过将该数据插入不同数据库中db.session
,并在提交时保存所有内容。
但是,我无法理解Flask-SQLAlchemy是创建多个会话(每个引擎一个会话)还是以不同的方式管理事物。
在这两种情况下,如何引用特定数据库的会话/事务?
如果我使用db.session.commit()
系统,那么是否对所有涉及的数据库都进行提交,但是如果我只想对单个数据库进行提交,该怎么办?
我会做类似的事情:
db.session(''mssql_bind'').commit()
但是我不知道该怎么做。
我还看到了Flask-SQLAlchemy实现,可以简化这些情况的管理:
问题:https :
//github.com/mitsuhiko/flask-
sqlalchemy/issues/107
实现:https :
//github.com/mitsuhiko/flask- sqlalchemy / pull /
249,
但我不知道如何使用它。
在Flask-SQLAlchemy中,如何管理每个引擎的会话?
答案1
小编典典Flask-SQLAlchemy使用定制的会话,该会话根据__bind_key__
映射类中的给定属性处理绑定路由。实际上,它实际上将该键作为信息添加到创建的表中。换句话说,Flask不会创建多个会话,每个绑定一个会话,而是一个单个会话,该会话根据绑定键路由到正确的可连接对象(引擎/连接)。请注意,香草SQLAlchemy具有开箱即用的类似功能。
在这两种情况下,如何引用特定数据库的会话/事务?如果我使用
db.session.commit()
系统,那么是否对所有涉及的数据库都进行提交,但是如果我只想对单个数据库进行提交,该怎么办?
在会话中使用会话拥有的连接来颠覆并向特定数据库提交提交不是一个好主意。会话是一个整体,并跟踪对象实例的状态,在需要时刷新对数据库的更改等。这意味着会话所处理的事务不仅是数据库事务,而且是会话本身的事务。所有这些都应该提交和回滚。
另一方面,您可以创建新的SQLAlchemy(或Flask-
SQLAlchemy)会话,这些会话可能通过绑定之一加入正在进行的事务:
session = db.create_scoped_session( options=dict(bind=db.get_engine(app, ''oracle_bind''), binds={}))
这就是请求请求的内容。它允许使用现有的事务连接作为新Flask-SQLAlchemy会话 的
绑定。例如,在测试中这是非常有用的,从该请求请求的原理中可以看出。这样,您可以拥有一个“主”事务,例如可以回滚测试中完成的所有操作。
请注意,如果存在 bind_key
,则SignallingSession
始终会查询该db.get_engine()
方法。这意味着示例会话无法在没有绑定键的情况下查询表,并且该表在您的oracle
DB上不存在,但仍适用于具有 mssql_bind 键的表。
另一方面,您链接到的问题确实列出了将SQL发出到特定绑定的方法:
rows = db.session.execute(query, params, bind=db.get_engine(app, ''oracle_bind''))
还列出了其他不太显式的方法,但是显式比隐式更好。
FLS vs TLS,我可以使用光纤本地存储来代替TLS吗?
我的库中有可移植的TLS(线程本地存储)代码,用于win-threads和pthreads,但TlsXXX api在WinRT上不可用。 但是, FlsXXX api的function与 TLS api 几乎相同 。 来自MSDN:
光纤可以使用光纤本地存储(FLS)为每个光纤创build一个variables的唯一副本。 如果不发生光纤切换,则FLS与线程本地存储完全相同
那么,这是否意味着我可以简单地使用FlsXXX api作为插入式replace(我不使用光纤,并且不使用__thread指定符作为variables,而是直接使用api)。
如何在窗口8 metro应用程序中保存捕获video文件?
使用Node.js的WinRT
WinRT从video中提取帧作为图像
首先,您必须将线程转换为光纤。
你不能在一个商店的应用程序,鸡蛋和鸡蛋的问题。 这是SDK文档所说的,但实际上并不是Microsoft CRT所做的,它使用FlsAlloc(),但从不在任何地方调用ConvertThreadToFiber / Ex()。 所以你没关系,只是从来没有调用CreateFiber()。
是的,如果您不根据SDK创建光纤,FLS与TLS完全相同:
光纤可以使用光纤本地存储(FLS)为每个光纤创建一个变量的唯一副本。 如果不发生光纤切换,则FLS与线程本地存储完全相同。 FLS函数(FlsAlloc,FlsFree,FlsGetValue和FlsSetValue)操作与当前线程关联的FLS。 如果线程正在执行光纤并且光纤被切换,则FLS也被切换。
你也可以看到在CRT中使用了,看看VS2012 + vc / crt / src / Platform.cpp源代码文件,__TlsAlloc()函数。 当_CRT_APP被#defined时,你会看到它退回到FlsAlloc。 适用于VCLibs构建,即Store应用程序中使用的构建。
没有明确的文件证明,但非常有力的证据证明,这是好的。
ios – 将多个托管对象上下文与核心数据库一起使用
>线程1将在CoreData基表(A)中插入数据.
>线程2将从另一个表(B)中获取数据.
我怎么能这样做?
我对谷歌进行了一些研究,他们说,我们需要使用多个托管对象上下文,但我不知道我们将如何使用它.
解决方法
这意味着,您应该为您创建的每个线程创建一个NSManagedobjectContext.确保将线程的NSManagedobjectContext的父上下文设置为主上下文.
示例: –
NSManagedobjectContext *mainContext; // = getMainContext NSManagedobjectContext *threadcontext = [[NSManagedobjectContext alloc] initWithConcurrencyType:nsprivateQueueConcurrencyType]; threadcontext.parentContext = mainContext;
然后在你的线程上使用threadcontext …
您可以在主线程上继续与UI相关的提取.或者,如果它也必须有其他线程,也可以为它创建一个上下文.
要深入了解Core Data并发性,请参阅a tutorial
设置父/子上下文关系将合并线程的Context与主上下文(它的父上下文).
要了解父/子上下文关系check this URL
或者只是在这个图表下 –
对文章网址的信用…
今天的关于何时使用 Redis 等键/值存储来代替/与 SQL 数据库一起使用?和redis数据什么时候存入数据库的分享已经结束,谢谢您的关注,如果想了解更多关于DAO与多个数据库一起在Spring中无法与Kotlin一起使用、Flask-SQLAlchemy-会话如何与多个数据库一起使用?、FLS vs TLS,我可以使用光纤本地存储来代替TLS吗?、ios – 将多个托管对象上下文与核心数据库一起使用的相关知识,请在本站进行查询。
本文标签: