Redis 键值存储数据库,类似字典
一.内存数据库
mysql mongodb 都是以文件的形式存储在磁盘上
Redis数据在内存中,操作内存的速度远远高于磁盘,并且Redis的数据最终也会存储在磁盘上
二.Redis服务器与客户端
手动连接 任务资源,服务关闭
redis.windows.conf启动服务器 redis-server 配置文件路径
客户端连接服务器
redis-cli -h 主机ip
-a 密码
三.配置文件
(1)获取配置信息
config get* 获取所有配置
config get requirepass
config set requirepass 密码
(2)配置用户密码
requirepass 123456
redis-cli -h -a
auth 123456
(3)常见配置项
dbfilename 数据文件
dump.rdb
requirepass 用户密码
masterauth 主机密码
logfile 日志文件
port 6379
database 16
loglevel 日志等级
bind 绑定ip
保存时间
save time changecount
save 900 1 修改一个15分钟以后保存
save 60 10000 修改达到一万个1分钟
四.5种数据类型
(1)字符串 string
常用操作:
set(k,v) 设置单个 存在会覆盖
get(k) 获取一个
mset({k:v,k:v}) 设置多个
mget([k,k,k,k]) 获取多个
incr 加1
incrby 加增量
decr 减1
decrby 减增量
setex(k,time,v) 设置带有时间的
setnx(k,v) 不存在则插入,不会覆盖
append(k,v) 在原始数据后添加
strlen(k)
(2)列表 list 存储多个数据
常用操作:
lpush(k,v) 开头插入
rpush(k,v) 末尾插入
lpop(k) 开头删除
rpop(k) 末尾删除
lset(k,index,v) 修改指定位置指定元素
linsert(key,after/before,元素,value) 在指定位置插入指定元素
lrem(key, count, value) 删除指定个数的指定元素
ltrim(key, start, stop) 把原始内容切片
lrange(key,start,end) 返回对应位置范围所有元素
lindex(key,index) 返回对应位置的元素
llen 获取元素个数
(3)哈希 hash 存储键值对
常用操作:
hget(name,key) 获取键对应的值
hset(name,key,value) 添加键值对
hmget(name,[key]) 获取列表中字段对应的值
hmset(name,{}) 添加多个键值对
hincrby(name,key,value) 字段的值,增加增量
hgetall(name) 所有字段与值
hkeys(name) 所有字段
hvals(name) 所有字段的值
hexists(name,key) 判断字段是否存在
hdel(name,key) 删除字段
hlen(name) 返回字段长度
(4)集合 set 无序不重复
常用操作:
sadd(key,*values) 将多个数据插入到集合
srem(key,value) 移除指定value
spop(key) 随机删除
srandmember(key,count) 随机取count个不删除
scard(key) 集合中元素个数
smembers(key) 返回所有元素
sismember(key,values) value是否在集合中
sinter([key,key]) 返回交集
sinterstore(dest,[key,key]) 将返回的交集存储在集合
sunion([key,key]) 返回并集
sunionstore(dest,[key,key]) 将返回的并集存储在集合
sdiff([key,key]) 返回差集
sdiffstore(dest,[key,key]) 将返回的差集存储到集合
(5)有序集合 zset
通过权重实现有序,每一个值都带有权重
常用操作:
zadd(name,{v:score}) 添加带有权重的元素
zrem(name,v,v) 从有序集合中移除
zcard(name) 个数
zcount(name,min,max) 权重在min,max之间元素个数
zrange(name,start,stop) 获取指定索引范围元素
zrevrange(name,start,stop) 逆序获取索引对应元素
zrangebyscore(name,start,stop) 获取指定分支对应元素
zrevrangebyscore(name,start,stop) 逆序获取指定分支对应元素
zscore(name,value) 获取value对应的权重
五.键对应的操作
keys() 返回所有键
type(k) 查看键对应值的类型
exists(k) 查看键是否存在
expire(k,time) 设置有效期
ttl(k) 查看剩余时间
delete(k) 删除键
六.python操作redis
安装模块 pip install redis
流程:
导入模块 import redis
构建连接 client=redis.StrictRedis(password="123456")
五种数据操作 (字符串,哈希,列表,集合,有序集合)
释放连接 client.close()
七.Redis缓存数据库 缓存mysql数据
‘’‘
因为操作mysql效率远远低于redis
第一次获取数据,把mysql中的数据放入redis中,以后操作redis
例如:真实数据存储在mysql上
每次需要获取评论,先从redis中取,如果redis中没有 则从mysql取 取出来放入redis
并且给与有效期,如果reids中直接就有,则直接使用redis’‘’
八.订阅发布
'''
订阅频道 subscribe 频道名
取消订阅 unsubscribe 频道名
发布消息 publish 频道名 消息
‘’‘
案例:
import redis import threading def t_main(): client = redis.StrictRedis(password="123456") #获取发布订阅实例 ps = client.pubsub() #监听指定频道 ps.subscribe("c1","c2","c3") #开始监听频道 for message in ps.listen(): print(f"消息",message) # client.close() def main(): t = threading.Thread(target=t_main) # 开启线程 t.start() while True: info = input("输入频道与消息,使用:分割") channel, message = info.split(":") if len(info) != 2: client = redis.StrictRedis(password="123456") client.publish(channel,message) else: print('输入格式错误,重新输入') # 阻塞线程 t.join() if __name__=="__main__": main()
九.数据库集群
’‘’
数据库集群
主从复制
master 主机
修改bind 改成自己主机ip
slave从机 复制主机文件
更改一下port(设置自己的,随便设置)
slaveof 主机ip 主机端口
主机写入数据 从机也能查看
info replication‘’‘