1. 为什么需要Redis和Anaconda刚入行做AI开发时我最头疼的就是环境配置。记得第一次跑推荐系统项目光是让Python环境和大数据组件和平共处就折腾了两天。后来发现Redis和Anaconda这两个神器简直就是AI开发者的瑞士军刀。Redis不只是个缓存数据库。在电商推荐场景中用户行为数据每秒可能产生数万条MySQL根本扛不住这种高频写入。我们团队实测发现用Redis做实时特征存储QPS每秒查询量能轻松突破10万而MySQL在相同配置下不到5000就崩了。更妙的是Redis的Sorted Set结构天然适合做排行榜比如今日热销商品Top100三行代码就能实现。Anaconda则是解决Python环境地狱的终极方案。上周帮同事调试一个TensorFlow模型他的本地环境是Python 3.8而项目需要3.6。用conda新建独立环境只要两条命令conda create -n tf_env python3.6 conda activate tf_env还能一键安装CUDA Toolkit再也不用担心GPU驱动兼容问题。2. Redis实战安装指南2.1 编译安装的正确姿势很多人第一次装Redis容易卡在编译环节。我建议直接用Redis 6.x以上版本对多线程支持更好。最新稳定版安装命令如下wget https://download.redis.io/releases/redis-6.2.7.tar.gz tar xzf redis-6.2.7.tar.gz cd redis-6.2.7 make如果遇到jemalloc.h: No such file报错这是内存分配器的问题。试试这个万能解法make distclean make2.2 生产级配置模板直接裸跑redis-server是新手常见错误。分享我们线上在用的配置模板精简版daemonize yes port 6379 tcp-backlog 511 timeout 0 tcp-keepalive 300 supervised systemd pidfile /var/run/redis_6379.pid loglevel notice logfile /var/log/redis.log databases 16 save 900 1 maxmemory 16gb maxmemory-policy allkeys-lru重点参数说明maxmemory-policy内存淘汰策略推荐用allkeys-lrusave持久化策略生产环境建议加上save 300 100表示5分钟内有100次写入就触发快照daemonize一定要设为yes否则终端关闭服务就停了2.3 安全加固三板斧密码保护在redis.conf中添加requirepass YourStrongPassword123连接时需要用auth命令认证redis-cli -h 127.0.0.1 -p 6379 127.0.0.1:6379 auth YourStrongPassword123禁用危险命令rename-command FLUSHDB rename-command CONFIG 防火墙规则iptables -A INPUT -p tcp --dport 6379 -s 192.168.1.0/24 -j ACCEPT iptables -A INPUT -p tcp --dport 6379 -j DROP3. Anaconda环境全攻略3.1 国内镜像加速官方源下载慢到怀疑人生换成清华镜像conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --set show_channel_urls yes安装包时速度直接起飞实测TensorFlow安装从2小时降到3分钟。3.2 多Python版本管理做AI项目经常遇到这种情况有的老项目用Python 3.6新项目又要用3.9。conda可以完美解决conda create -n py36 python3.6 # 创建3.6环境 conda create -n py39 python3.9 # 创建3.9环境 conda activate py36 # 切换环境更骚的操作是环境克隆当你想基于现有环境做实验时conda create --name tf2_copy --clone tf2_env3.3 Jupyter Lab远程访问比notebook更好用的Jupyter Lab配置方法生成配置文件jupyter lab --generate-config设置密码from jupyter_server.auth import passwd passwd()修改~/.jupyter/jupyter_lab_config.pyc.ServerApp.ip 0.0.0.0 c.ServerApp.password 刚才生成的密文 c.ServerApp.open_browser False c.ServerApp.port 8888 c.ServerApp.allow_remote_access True4. 联合实战推荐系统集成4.1 特征存储方案在电商推荐系统中我们这样用Redis存储用户实时特征import redis import pickle r redis.Redis(hostlocalhost, port6379, db0) # 存储用户最近浏览 user_id 10086 browse_history [ {item_id: A001, timestamp: 1628000000}, {item_id: B205, timestamp: 1628000100} ] r.set(fuser:{user_id}:history, pickle.dumps(browse_history)) # 读取时 loaded_data pickle.loads(r.get(fuser:{user_id}:history))4.2 模型服务化用Anaconda环境打包Flask API服务from flask import Flask import pandas as pd from recommend_model import load_model app Flask(__name__) model load_model() # 你的推荐模型 app.route(/recommend/user_id) def recommend(user_id): user_features get_redis_features(user_id) # 从Redis获取特征 df pd.DataFrame([user_features]) return model.predict(df).to_json() if __name__ __main__: app.run(host0.0.0.0, port5000)启动服务时建议用gunicorn多进程conda activate recsys_env gunicorn -w 4 -b :5000 app:app4.3 性能优化技巧Redis管道技术将多个命令一次性发送减少网络往返时间pipe r.pipeline() pipe.set(foo, bar) pipe.get(foo) result pipe.execute() # [OK, bar]conda环境瘦身删除不必要的包conda clean --all # 清理所有缓存 conda remove --name myenv --all # 删除整个环境Jupyter魔法命令调试时超好用%%timeit # 测量代码执行时间 %prun some_function() # 性能分析 %debug # 进入调试模式踩过的坑才最深刻。有次线上服务崩溃查了半天发现是conda环境里混用了pip和conda安装的包。现在我的原则是要么全用conda要么全用pip绝对不混用。还有个Redis的教训——没设maxmemory导致内存爆满现在所有项目都会严格配置内存淘汰策略。