即使在正常运行1到2小时后,Redis槽(ERR操作不允许)也会出错

时间:2015-12-10 11:28:09

标签: spring redis redis-cache

我在我的项目中使用Redis用于缓存目的,我使用Spring进行设置,您可以通过下面提到的链接来了解我在项目中所做的事情。 http://caseyscarborough.com/blog/2014/12/18/caching-data-in-spring-using-redis/

此代码在过去6到8个月的生产环境(Rhel 7-EC2实例)中运行良好。现在突然开始给予" ERR操作不被允许"错误

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Diagnostics;
using Windows.Networking.Proximity;
using Windows.Storage.Streams;

namespace hsProximity
{
    public delegate void cbUID([MarshalAs(UnmanagedType.LPWStr)] string AStr);
    public delegate void cbState(int AStatus);

    [ComVisible(true), Guid("81C99F84-AA95-41A5-868E-62FAC8FAC263"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IHSProximityInterface
    {
        bool doInitialise(Int32 cbUIDPtr, Int32 cbStatePtr, out String AMessage);
    }

    [ClassInterface(ClassInterfaceType.None), ComVisible(true)]
    public class MainClass : IHSProximityInterface
    {
        public ProximityDevice proximityDevice;
        public List<NdefRecord> recordList;
        IntPtr ptr;
        cbUID callbackUID;
        cbState callbackState;

        public bool doInitialise(Int32 cbUIDPtr, Int32 cbStatePtr, out String AMessage)
        {
            recordList = new List<NdefRecord>();
            proximityDevice = ProximityDevice.GetDefault();

            ptr = new IntPtr(cbUIDPtr);
            callbackUID = (cbUID)Marshal.GetDelegateForFunctionPointer(ptr, typeof(cbUID));

            ptr = new IntPtr(cbStatePtr);
            callbackState = (cbState)Marshal.GetDelegateForFunctionPointer(ptr, typeof(cbState));

            if (proximityDevice != null)
            {
                proximityDevice.DeviceArrived += ProximityDeviceArrived;
                proximityDevice.DeviceDeparted += ProximityDeviceDeparted;
                proximityDevice.SubscribeForMessage("NDEF", MessageReceivedHandler);
                AMessage = "Proximity device initialized. ID: " + proximityDevice.DeviceId;
                return true;
            }
            else
            {
                AMessage = "Failed to initialize proximity device.";
                return false;
            }
        }

        public void ProximityDeviceArrived(ProximityDevice sender)
        {
            callbackState(1);
        }

        public void ProximityDeviceDeparted(ProximityDevice sender)
        {
            callbackState(0);
        }

        public void MessageReceivedHandler(ProximityDevice sender, ProximityMessage message)
        {
            recordList.Clear();
            callbackUID(ParseNDEF(message));
        }
    }
}

由于这个原因,我们无法从Redis服务器获取数据。因此,我们的申请无法正常运作。

我确实搜索过这个问题,我已经浏览了类似的链接 redis (error) ERR operation not permitted

这表示要检查&#34; requirepass&#34;在redis.conf文件中是否对其进行了评论,但是当我在生产环境中看到redis.conf文件时将其注释掉了。 即使通过它评论我在redis-cli上运行下面提到的命令 &#34; AUTH foobared&#34; 在运行上述命令后,它没有工作。

注意:但是当我们终止正在运行的Redis实例并重新启动它时,它将开始正常工作,然后它不会给出&#34; ERR操作不被允许&#34;错误。

Redis重新启动后,系统再开始工作一到两个小时,然后又出现同样的问题,重新启动Redis服务器后它会再次关闭。

注意:我尝试将Redis服务器从2.6升级到3,即使它没有工作

1 个答案:

答案 0 :(得分:0)

你的Redis是否暴露在互联网上? 它可能是CONFIG SET requirepass攻击。

请参阅this SO question和@antirez评论here