Redis-Docker-Ubuntu启动容器命令

docker run -d --name redis1 -p 16379:6379 -v /Users/${yourname}/xcredis/docker_data:/data 44d36d2c2374 --appendonly yes --appendfsync everysec

注意挂载目录,冒号前面是宿主机,后面是docker内部

设置密码

--requirepass "mypassword"

挂载外部配置和数据安装

1.创建目录和配置文件redis.conf

mkdir /docker
mkdir /docker/redis
mkdir /docker/redis/conf
mkdir /docker/redis/data

创建redis.conf配置文件

touch /docker/redis/conf/redis.conf
redis.conf文件内容自行添加:

切记注释掉:#daemonize yes 否则无法启动容器

重要话说三遍:注释掉#daemonize yes,注释掉#daemonize yes,注释掉#daemonize yes

2.创建启动容器,加载配置文件并持久化数据

docker run -d --privileged=true -p 6379:6379 -v /docker/redis/conf/redis.conf:/etc/redis/redis.conf -v /docker/redis/data:/data --name redistest2 redis:4.0 redis-server /etc/redis/redis.conf --appendonly yes

参数说明:

--privileged=true:容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限

-v /docker/redis/conf/redis.conf:/etc/redis/redis.conf:映射配置文件

-v /docker/redis/data:/data:映射数据目录

redis-server /etc/redis/redis.conf:指定配置文件启动redis-server进程

--appendonly yes:开启数据持久化

其他redis配置选项(选自某篇技术博客)

appendonly yes #开启AOF模式 原文1
appendfilename “appendonly.aof” #保存数据的AOF文件名称 原文1

appendfsync always
appendfsync everysec #fsync模式 原文2
appendfsync no
no-appendfsync-on-rewrite no #原文3
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb #原文4
aof-load-truncated yes #原文5

redis客户端连接(shell)

redis-cli -h 192.168.124.14 -a redis

redis客户端连接(py)

import time
import redis
from redis import ConnectionPool

class RedisPy(object):
    def __init__(self):
        pool = ConnectionPool(host='127.0.0.1', port=36379, max_connections=100)
        self.conn = redis.Redis(connection_pool=pool)

    def get_keys(self):
        keys = self.conn.keys("*")
        print(keys)

    def set_string(self):
        r = self.conn.set("name", "uname")
        print(r)

    def get_string(self):
        r = self.conn.get("name")
        print(r)

    def r_push(self):
        r = self.conn.rpush("list1", 100, 200, 300)
        print(r)

    def b_l_pop(self):
        r = self.conn.blpop("list1", 100)
        print(r)

if __name__ == '__main__':
    rp = RedisPy()
    # rp.get_keys()
    # rp.set_string()
    # rp.get_string()
    # rp.r_push()
    while True:
        time.sleep(3)
        rp.b_l_pop()