Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
10W OPS(每秒操作数10W,实测6W左右)
数据存在内存中(内存读写速度高达40~50G/s)
c语言实现,单线程模型
Redis有RDB和AOF机制
RDB其实就是把数据以快照的形式保存在磁盘上。什么是快照呢,你可以理解成把当前时刻的数据拍成一张照片保存下来。
全量备份总是耗时的,有时候我们提供一种更加高效的方式AOF,工作机制很简单,redis会将每一个收到的写命令都通过write函数追加到文件中。通俗的理解就是日志记录。
str:字符串类型 - 接口缓存
list:列表 - 分布式
hash:哈希(相当于Python中的字典) - 缓存
set:集合 - 去重
zset:有序的 - 排行榜
基于TCP通信协议,各大编程语言都支持
发布订阅(消息) Lua脚本,事务(pipeline)等
源代码几万行,不依赖外部库
主服务器和从服务器,主服务器可以同步到从服务器中
2.8版本以后使用redis-sentinel支持高可用
3.0版本以后支持分布式
缓存系统: 使用最广泛的就是缓存
计数器: 网站访问量,转发量,评论数(文章转发,商品销量,单线程模型,不会出现并发问题)
消息队列: 发布订阅,阻塞队列实现(简单的分布式,blpop:阻塞队列,生产者消费者)
排行榜: 有序集合(阅读排行,点赞排行,推荐(销量高的,推荐))
社交网络: 很多特效跟社交网络匹配,粉丝数,关注数
实时系统: 垃圾邮件处理系统,布隆过滤器
redis-server
ps -ef|grep redis #查看进程
netstat -antpl|grep redis #查看端口
redis-cli -h ip -p port ping #命令查看
redis-serve --port 6380 #启动,监听6380端口
##通过redis-cli连接,输入config get * 可以获得默认配置
#在redis目录下创建config目录,copy一个redis.conf文件
#daemonize--》是否是守护进程启动(no|yes)
#port---》端口号
#logfile--》redis系统日志
#dir--》redis工作目录
pip3 install redis
from redis import Redis
conn=Redis(host=‘127.0.0.1‘, port=6379)
ret=conn.get(‘name‘)
print(ret)
t_redis_pool.py
中import redis
# pool必须是单例的
POOL = redis.ConnectionPool(host=‘127.0.0.1‘, port=6379,max_connections=100) # 造一个池子,最多能放100个连接
t_redis_conn.py
中import redis
# 包内的py文件,如果想右键运行,导包的时候不能带点
from t_redis_pool import POOL # pycharm提示的错
r = redis.Redis(connection_pool=POOL) # 只要执行这一句话,就是从池中拿出一个连接
ret=r.get(‘name‘)
print(ret)
set(self, name, value,ex=None, px=None, nx=False, xx=False, keepttl=False)
name:key的名字
value:key的值
ex:过期时间(秒)
px:过期时间(毫秒)
nx:如果设置为True,则只有name不存在时,当前set操作才执行,值存在,就修改不了,执行没效果
xx:如果设置为True,则只有name存在时,当前set操作才执行,值存在才能修改,值不存在,不会设置新值
conn.set(‘height‘,‘180‘) # 基本使用
conn.set(‘height‘,‘180‘, 3) # 设置过期时间为3秒
conn.set(‘height1‘,‘190‘,nx=True) # 如果不存在‘height1‘,就创建并复制;如果存在,则无变化
conn.set(‘height‘,‘190‘,xx=True) # 把存在的‘height‘的值改成190;不存在,则无变化
相当于set(key,value,nx=True)
相当于set(key,value,time)
相当于set(key,time,value,ex=True)
相当于set(key,value,ex=True)
conn.mset({‘name‘:‘xxq‘, ‘age‘:‘18‘})
get(self, name)
name:key的名字
conn.get(‘age‘)
原文:https://www.cnblogs.com/xuexianqi/p/13377213.html