小编Mar*_*oni的帖子

Redis中的交易和观察声明

能否按照"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的值,那么我们的事务将会失败.如果没有客户端更改该值,则该集合将起作用.我们可以在循环中执行此代码,直到它工作.

为什么我们不能在不能被其他命令中断的事务中执行增量?为什么我们需要迭代而等到交易开始没有人改变价值?

redis

31
推荐指数
1
解决办法
2万
查看次数

SOAPFaultException"MustUnderstand标头(oasis-200401-wss-wssecurity-secext-1.0.xsd)未被理解"

我尝试从使用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 …

java webservice-client wss4j

18
推荐指数
2
解决办法
6万
查看次数

基于密钥的缓存过期

我想在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类时,我们需要:

  1. 更新C中的时间戳
  2. 更新B中的时间戳.
  3. 更新A中的时间戳

在此之后我们访问A类视图时,我们需要:

  1. 使SELECT从A获取时间戳.
  2. 检查没有带有此时间戳的缓存对象,因此我们需要重新缓存它.
  3. 使SELECT获取A数据.
  4. 使SELECT从B获取所有时间戳.
  5. 获取Bs存在于缓存中.
  6. 使SELECT获取缓存中不存在的Bs.
  7. 使SELECT获取与缓存中不存在的B相关的Cs的所有时间戳.
  8. 从缓存中获取Cs(如果存在).
  9. 使SELECT获取缓存中不存在的Cs.

所以,如果我理解这个策略,我们需要为每个对象做DB-2的6个查询:一个将获得时间戳,第二个 - 对象,在缓存中过时.

相反,如果我们将重置所有数据,我们只需要进行3次查询:

  1. 获取对象A.
  2. 获取相关对象B.
  3. 获取相关对象C.

据我所知,最好用更多的数据执行3个查询,而不是用更少的6个查询执行.那么这个策略有效吗?

当然,我们也可以在缓存中存储时间戳,但在这种情况下,我们将面临时间戳无效的问题.因此,对于需要避免失效的策略的数据无效是没有意义的.

如果我对理解该算法的工作范围或工作原理有误,请纠正我.

caching

8
推荐指数
0
解决办法
1756
查看次数

TTS工具用于商业用途

你们,伙计们,帮我找一些好的TTS(文字转语音)工具用于商业目的吗?我检查了几个工具,但其中一些太昂贵($ 5000 +),如AT&T,其他 - 低质量,如FreeTTS.我需要免费或低价(最高500美元)的应用程序或网络服务来创建适合教育目的的英语单词和短语的wavmp3文件.

谢谢!

PS大型库准备好wav或mp3文件也行.

text-to-speech

5
推荐指数
1
解决办法
2万
查看次数

使用Redis计算过去24小时的事件数

似乎,这是常见的任务,但我还没有找到解决方案。

我需要计算过去 24 小时内用户事件的数量(例如,他留下了多少评论)。较旧的数据对我来说并不有趣,因此应该从 Redis 中删除有关一个月前添加的评论的信息。

现在我只看到一种解决方案。我们可以制作包含用户 ID 和一天中的小时的键,增加它的值。然后我们将得到 24 个值并计算它们的总和。每个密钥都有 24 小时的有效期。

例如,

  1. 6 月 22 日 13:27 的事件 -> 创建密钥 _22_13 = 1
  2. 6 月 22 日 13:40 的事件 -> 递增键 _22_13 = 2
  3. 6 月 22 日 18:45 的事件 -> 创建密钥 _22_18 = 1
  4. 6 月 23 日 16:00 的事件 -> 创建密钥 _23_16 = 1
  5. 在 6 月 23 日 16:02 获取事件总和 -> 键 _22_17 - _22_23、_23_00 - _23_16 的总和:在我们的键中只有 _22_18 和 _23_16,结果为 2。键 _22_13 和 _22_1 …

redis

5
推荐指数
1
解决办法
2353
查看次数

在Django中重置密码后验证用户

我使用标准的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)

django django-authentication

5
推荐指数
2
解决办法
1565
查看次数

django_webtest中的用户身份验证

我的模板中有以下代码:

<div class="account">
{% if request.user.is_authenticated %}
    <a href="{% url settings %}"
       class="iconed username">{{ request.user.username }}</a>
    &nbsp;|&nbsp;
    <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>
    &nbsp;|&nbsp;
    <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)

django django-testing

3
推荐指数
1
解决办法
1455
查看次数