能否按照"The Little Redis Book"的例子向我解释一下:
使用上面的代码,我们将无法实现自己的incr命令,因为一旦调用了exec,它们就会一起执行.从代码中,我们做不到:
redis.multi()
current = redis.get('powerlevel')
redis.set('powerlevel', current + 1)
redis.exec()
Run Code Online (Sandbox Code Playgroud)
这不是Redis交易的工作方式.但是,如果我们为powerlevel添加一个手表,我们可以这样做:
redis.watch('powerlevel')
current = redis.get('powerlevel')
redis.multi()
redis.set('powerlevel', current + 1)
redis.exec()
Run Code Online (Sandbox Code Playgroud)
如果另一个客户端在我们调用了watch之后更改了powerlevel的值,那么我们的事务将会失败.如果没有客户端更改该值,则该集合将起作用.我们可以在循环中执行此代码,直到它工作.
为什么我们不能在不能被其他命令中断的事务中执行增量?为什么我们需要迭代而等到交易开始前没有人改变价值?
我尝试从使用PasswordText WSS类型的Web服务获取信息.首先,我使用soapUI测试它并成功获取数据.然后我在Java上实现了身份验证,编写了SecurityHandler:
public final class SecurityHandler implements SOAPHandler<SOAPMessageContext> {
...
@Override
public boolean handleMessage(SOAPMessageContext messageContext) {
boolean outInd = (Boolean) messageContext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (outInd) {
try {
WSSecUsernameToken builder = new WSSecUsernameToken();
builder.setPasswordType(WSConstants.PASSWORD_TEXT);
builder.setUserInfo(_username, _password);
builder.addNonce();
builder.addCreated();
Document doc = messageContext.getMessage().getSOAPPart().getEnvelope().getOwnerDocument();
WSSecHeader secHeader = new WSSecHeader();
secHeader.insertSecurityHeader(doc);
builder.build(doc, secHeader);
} catch (Exception e) {
LOGGER.error("Unable to handle SOAP message", e);
return false;
}
}
return true;
}
...
}
Run Code Online (Sandbox Code Playgroud)
我查看了doc对象,XMLUtils.PrettyDocumentToString(doc)看到它看起来像是由soupUI发送的XML - 所有认证信息(登录,密码,现时和创建时间)都已到位,标签的mustUnderstand属性Security为true.
然后我遇到了错误:
javax.xml.ws.soap.SOAPFaultException:MustUnderstand标题:[{ http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd …
我想在37signals博客上讨论名为How key-based cache expiration的帖子.我是Django开发人员,而不是RoR,所以这里是Ross Poulton的Django"翻译":Django基于密钥的缓存过期.
正如您所看到的,主要思想如下:我们有"俄罗斯娃娃"结构,其中一个对象包含其他几个级别.
class A:
timestamp updated_at;
class B:
A parent;
timestamp updated_at;
class C:
B parent;
timestamp updated_at;
Run Code Online (Sandbox Code Playgroud)
类A的对象的视图(例如,HTML)与所有相关对象一起缓存.更新C类时,我们需要:
在此之后我们访问A类视图时,我们需要:
所以,如果我理解这个策略,我们需要为每个对象做DB-2的6个查询:一个将获得时间戳,第二个 - 对象,在缓存中过时.
相反,如果我们将重置所有数据,我们只需要进行3次查询:
据我所知,最好用更多的数据执行3个查询,而不是用更少的6个查询执行.那么这个策略有效吗?
当然,我们也可以在缓存中存储时间戳,但在这种情况下,我们将面临时间戳无效的问题.因此,对于需要避免失效的策略的数据无效是没有意义的.
如果我对理解该算法的工作范围或工作原理有误,请纠正我.
你们,伙计们,帮我找一些好的TTS(文字转语音)工具用于商业目的吗?我检查了几个工具,但其中一些太昂贵($ 5000 +),如AT&T,其他 - 低质量,如FreeTTS.我需要免费或低价(最高500美元)的应用程序或网络服务来创建适合教育目的的英语单词和短语的wav或mp3文件.
谢谢!
PS大型库准备好wav或mp3文件也行.
似乎,这是常见的任务,但我还没有找到解决方案。
我需要计算过去 24 小时内用户事件的数量(例如,他留下了多少评论)。较旧的数据对我来说并不有趣,因此应该从 Redis 中删除有关一个月前添加的评论的信息。
现在我只看到一种解决方案。我们可以制作包含用户 ID 和一天中的小时的键,增加它的值。然后我们将得到 24 个值并计算它们的总和。每个密钥都有 24 小时的有效期。
例如,
我使用标准的Django视图password_reset_confirm()来重置用户的密码.用户在信中跟随密码重置链接后,输入新密码,然后查看将其重定向到站点根目录:
urls.py
url(r'^password-reset/confirm/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
'django.contrib.auth.views.password_reset_confirm', {
'template_name': 'website/auth/password_reset_confirm.html',
'post_reset_redirect': '/',
}, name='password_reset_confirm'),
Run Code Online (Sandbox Code Playgroud)
Django重定向用户后,他没有经过身份验证.我不希望他再次输入密码,相反,我想在设置新密码后立即对他进行身份验证.
为了实现此功能,我创建了一个委托视图.它包装标准的并处理其输出.因为标准视图仅在密码重置成功时重定向用户,所以我检查它返回的响应的状态代码,如果是重定向,则再次从DB检索用户并验证他.
urls.py
url(r'^password-reset/confirm/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
views.password_reset_confirm_delegate, {
'template_name': 'website/auth/password_reset_confirm.html',
'post_reset_redirect': '/',
}, name='password_reset_confirm'),
Run Code Online (Sandbox Code Playgroud)
views.py
@sensitive_post_parameters()
@never_cache
def password_reset_confirm_delegate(request, **kwargs):
response = password_reset_confirm(request, **kwargs)
# TODO Other way?
if response.status_code == 302:
try:
uid = urlsafe_base64_decode(kwargs['uidb64'])
user = User.objects.get(pk=uid)
except (TypeError, ValueError, OverflowError, User.DoesNotExist):
pass
else:
user = authenticate(username=user.username, passwordless=True)
login(request, user)
return response
Run Code Online (Sandbox Code Playgroud)
backends.py
class PasswordlessAuthBackend(ModelBackend):
"""Log in to Django without providing a password.
"""
def authenticate(self, username, passwordless=False):
if …Run Code Online (Sandbox Code Playgroud) 我的模板中有以下代码:
<div class="account">
{% if request.user.is_authenticated %}
<a href="{% url settings %}"
class="iconed username">{{ request.user.username }}</a>
|
<a href="{% url logout %}?next={{ request.path }}"
class="iconed logout">{% trans "Logout" %}</a>
{% else %}
<a href="{% url login %}?next={{ request.path }}" class="iconed login">{% trans "Login" %}</a>
|
<a href="{% url sign_up %}?next={{ request.path }}"
class="iconed sign-up">{% trans "Sign up" %}</a>
{% endif %}
</div>
Run Code Online (Sandbox Code Playgroud)
如您所见,它显示不同的链接取决于用户是否登录.如果我用手测试它,它工作正常,但当我尝试使用以下代码测试它时:
def test_home_logged_in(self):
if self.client.login(username='Test', password='secret'):
home = self.app.get('/')
self.assertOK(home)
self.assertContains(home, '/settings/')
self.assertContains(home, '/logout/')
else:
self.fail("Couldn't log in.") …Run Code Online (Sandbox Code Playgroud)