Search code examples
javamemcachedspymemcached

How to Use memcached on different port


i have excuted c:\memcached>memcached -l 0.0.0.0:11211,0.0.0.0:11212
getaddrinfo(): No such host is known.
failed to listen on TCP port 11211: No error.
and that was the response i got
if i will execute c:\memcached>memcached -p 11211 -d
memcached: option requires an argument -- d
Illegal argument "?" this was the response i got. so i tried these following commands
c:\memcached>memcached -p 11211 -d start
c:\memcached>memcached -p 11212 -d start

but still its listening to port 11211 not on 11212.why?


Solution

  • memcached for windows will not listen on multiple ports with the same instance, you will need multiple instances of the service to get it to run as a service on different ports.

    To accomplish this, you will need to use a different mechanism for installing the service, rather than the memcached -d install mechanism.

    We can use sc to accomplish this. All these commands will need to be run from an elevated command prompt.

    sc create "Memcached11211" binPath= "C:\memcached\memcached.exe -d runservice -p 11211"  DisplayName= "Memcached11211" start= auto
    sc create "Memcached11212" binPath= "C:\memcached\memcached.exe -d runservice -p 11212"  DisplayName= "Memcached11212" start= auto
    

    Then we start them:

    C:\memcached>sc start Memcached11211
    
    SERVICE_NAME: Memcached11211
            TYPE               : 10  WIN32_OWN_PROCESS
            STATE              : 4  RUNNING
                                    (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
            WIN32_EXIT_CODE    : 0  (0x0)
            SERVICE_EXIT_CODE  : 0  (0x0)
            CHECKPOINT         : 0x0
            WAIT_HINT          : 0x0
            PID                : 5412
            FLAGS              :
    
    C:\memcached>sc start Memcached11212
    
    SERVICE_NAME: Memcached11212
            TYPE               : 10  WIN32_OWN_PROCESS
            STATE              : 4  RUNNING
                                    (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
            WIN32_EXIT_CODE    : 0  (0x0)
            SERVICE_EXIT_CODE  : 0  (0x0)
            CHECKPOINT         : 0x0
            WAIT_HINT          : 0x0
            PID                : 7976
            FLAGS              :
    
    C:\memcached>netstat -an | grep 112
    File STDIN:
      TCP    0.0.0.0:11211          0.0.0.0:0              LISTENING
      TCP    0.0.0.0:11212          0.0.0.0:0              LISTENING
      TCP    [::]:11211             [::]:0                 LISTENING
      TCP    [::]:11212             [::]:0                 LISTENING
      UDP    0.0.0.0:11211          *:*
      UDP    0.0.0.0:11211          *:*
      UDP    [::]:11211             *:*
      UDP    [::]:11211             *:*�
    

    Note however that as configured, the udp port is still 11211, so it would need to be changed to ensure that udp can be used as well for both services.

    You would add a -u 11211 and -u 11212 to the sc configuration lines.

    To stop and individual memcached service you would use:

    sc stop memcached11211
    sc stop memcached11212
    

    to remove the services do:

    sc delete memcached11211
    sc delete memcached11212
    

    If however you're just trying it out on different ports then just use multiple cmd windows and run it that way.