Depois de muita pesquisa, finalmente descobri que o systemd tem um limite padrão de 4096 e, independentemente do que você definir no nível do sistema, o nível do systemd sempre terá precedência. A correção para isso é alterar o limite de arquivos abertos do systemd editando /etc/systemd/system.conf e adicionando a seguinte configuração
DefaultLimitNOFILE=65536
Parece que existem muitas configurações padrão no systemd que substituem as configurações do sistema, portanto, devem ser definidas no systemd
Portanto, se for útil para as pessoas, essas são minhas configurações finais para um servidor Ubuntu 16.04 para executar redis de produção.
Edite /etc/systemd/system.conf (sudo nano /etc/systemd/system.conf) e adicione
DefaultLimitNOFILE=65536
Edite /etc/security/limits.conf (sudo nano /etc/security/limits.conf) e adicione
* soft nofile 64000
* hard nofile 64000
root soft nofile 64000
root hard nofile 64000
Edite /etc/pam.d/common-session (sudo nano /etc/pam.d/common-session) e adicione
session required pam_limits.so
Edite /etc/pam.d/common-session-noninteractive (sudo nano /etc/pam.d/common-session-noninteractive) e adicione
session required pam_limits.so
Edite /etc/rc.local (sudo nano /etc/rc.local) e adicione
sysctl -w net.core.somaxconn=65535
Edite /etc/sysctl.conf (sudo nano /etc/sysctl.conf) e adicione
vm.overcommit_memory = 1
Edite /etc/rc.local (sudo nano /etc/rc.local) e adicione
echo never > /sys/kernel/mm/transparent_hugepage/enabled