redis|docker-compose、k8s部署单机版redis

一、docker-compose安装redis cat docker-compose.yml

version: '3'services: redis: image: redis:5.0.7-buster restart: IfNotPresent container_name: my_redis # Redis 的密码需要自己在与容器共享的配置 redis.conf 中加入,即更改配置中 requirepass yourpassword #command: redis-server /usr/local/etc/redis/redis.conf # 直接在其所在目录下执行 docker-compose up -d,即可在 Docker 中生成一个带密码的 Redis 容器。 #command: redis-server --requirepass leojiang ports: - "6379:6379" volumes: - ./data/redis:/data # 容器与宿主机时间同步 - /etc/localtime:/etc/localtime environment: TIME_ZONE: Asia/Shanghai

找一个配置文件:
方法一:官网下载(推荐)
方法二:根据版本解压一个官网的二进制包抽出来一个redis.conf
wget http://download.redis.io/releases/redis-5.0.7.tar.gz tar xzf redis-5.0.7.tar.gz

二、k8s部署redis 【redis|docker-compose、k8s部署单机版redis】redis-service.yaml
apiVersion: v1 kind: Service metadata: name: redis labels: app: redis namespace: paas-basic spec: selector: app: redis-pod type: NodePort ports: - name: redis-port port: 6379 targetPort: 6379 protocol: TCP

redis-deploy.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: redis-deploy namespace: paas-basic labels: name: redis-deploy-label spec: replicas: 1 minReadySeconds: 20 # 容器启动创建X秒后服务可用 strategy: type: RollingUpdate rollingUpdate: maxSurge: 2 maxUnavailable: 0 selector: matchLabels: app: redis-pod template: metadata: labels: app: redis-pod spec: nodeSelector: redis: "true" terminationGracePeriodSeconds: 40#k8s正确、优雅地关闭应用,等待时间30秒 containers: - name: redis-container image: redis:5.0.7-buster imagePullPolicy: IfNotPresent ports: - containerPort: 6379 volumeMounts: - name: redis-volume mountPath: /data - name: redis-conf mountPath: /usr/local/etc/ volumes: - name: redis-volume hostPath: path: /home/k8s-1.19.2/paas-basic/redis/volume - name: redis-conf hostPath: path: /home/k8s-1.19.2/paas-basic/redis/config

k8s部署
三、redis.conf设置最大内存 1、通过配置文件配置
通过在Redis安装目录下面的redis.conf配置文件中添加以下配置设置内存大小。
//设置Redis最大占用内存大小为100M
maxmemory 100mb
redis的配置文件不一定使用的是安装目录下面的redis.conf文件,启动redis服务的时候是可以传一个参数指定redis的配置文件的。
2、通过命令修改
Redis支持运行时通过命令动态修改内存大小
登录
redis-cli -h 127.0.0.1 -p 6379 -a "mypass"

//设置Redis最大占用内存大小为100M
127.0.0.1:6379> config set maxmemory 100mb

//获取设置的Redis能使用的最大内存大小
127.0.0.1:6379> config get maxmemory

如果不设置最大内存大小或者设置最大内存大小为0,在64位操作系统下不限制内存大小,在32位操作系统下最多使用3GB内存
redis.conf中的maxmemory定义可用最大物理内存,有多种书写方式,以下均为合法:
maxmemory 1048576
maxmemory 1048576B
maxmemory 1000KB
maxmemory 100MB
maxmemory 1GB
maxmemory 1000K
maxmemory 100M
maxmemory 1G
没有带单位尾巴的为字节数,以B结尾的表示相应的大小。但需要注意KB和K、MB和M、GB和G是不同的,如1K表示1000字节,而1KB则为1024字节。
3、查看当前redis节点内存状态
[root@app01 fastdfs]# docker exec -it redis redis-cli -h 127.0.0.1 -p 6379 -a sinoeyes info | grep memory used_memory:849488 used_memory_human:829.58K used_memory_rss:2682880 used_memory_rss_human:2.56M used_memory_peak:849488 used_memory_peak_human:829.58K used_memory_peak_perc:100.00% used_memory_overhead:836262 used_memory_startup:786624 used_memory_dataset:13226 used_memory_dataset_perc:21.04% total_system_memory:16656908288 total_system_memory_human:15.51G used_memory_lua:37888 used_memory_lua_human:37.00K maxmemory:0 maxmemory_human:0B maxmemory_policy:noeviction [root@app01 fastdfs]#

redis|docker-compose、k8s部署单机版redis
文章图片

四、Redis的内存淘汰 既然可以设置Redis最大占用内存大小,那么配置的内存就有用完的时候。那在内存用完的时候,还继续往Redis里面添加数据不就没内存可用了吗?
实际上Redis定义了几种策略用来处理这种情况:
noeviction(默认策略):对于写请求不再提供服务,直接返回错误(DEL请求和部分特殊请求除外)
allkeys-lru:从所有key中使用LRU算法进行淘汰
volatile-lru:从设置了过期时间的key中使用LRU算法进行淘汰
allkeys-random:从所有key中随机淘汰数据
volatile-random:从设置了过期时间的key中随机淘汰
volatile-ttl:在设置了过期时间的key中,根据key的过期时间进行淘汰,越早过期的越优先被淘汰
当使用volatile-lru、volatile-random、volatile-ttl这三种策略时,如果没有key可以被淘汰,则和noeviction一样返回错误。
如何获取及设置内存淘汰策略
获取当前内存淘汰策略:
127.0.0.1:6379> config get maxmemory-policy

通过配置文件设置淘汰策略(修改redis.conf文件):
maxmemory-policy allkeys-lru

通过命令修改淘汰策略:
127.0.0.1:6379> config set maxmemory-policy allkeys-lru

    推荐阅读