Redis
内存型数据库 效率很高
应用:缓存 队列系统 ,session共享、购物车。。。。
非关系型数据库典范 不需要SQL语句
1.REDIS介绍
高性能Key-Value数据库
NoSql
- 泛指非关系型数据库
- 不支持SQL语法
- 储存形式K-V
- 无通用语言,每种NoSql有自己api语法
- 有:Mongodb、 Redis 、Hbase hadoop、Cassandra hadoop
需自学hadoop mongodb
做人工智能肯定是非关系型数据库
两种数据库比较
sql数据库适合用于关系复杂的数据查询场景 nosql适合关系简单
Nosql基本不支持事务
Sql数据库基本是抽象模拟客观世界!
NoSql是以数学角度出发
Redis特性:支持数据持久化,可以将内存中数据保存在磁盘中,重启时候再次加载进行使用;
不仅仅支持k-v形式,还支持list set zset hash等;
支持数据的备份
2.安装
brew install redis
3.配置
bind 绑定地址
port 端口
logfile 日志文件地址
databases 16 16个数据库
dbfilename 备份文件名
slaveof 去当从数据库 写上主数据库的ip 端口
daemonize yes:是否以守护进程运⾏
如果以守护进程运⾏,则不会在命令⾏阻塞,设置为yes表示守护进程,设置为no表示⾮守护进程,推荐yes
4.命令
服务端:
redis-server --help
redis-server
ps aux |grep redis
客户端
redis-cli --help
-h 指定ip
5.数据操作
数据结构、
K-V形式存储,键不能重复
值可以是string hash(存对象) list set zset
字符串:二进制 最大512m
flushall清空数据库
设置键值 set key value EX过期时间
setex key value 过期时间
获得键值 get key
修改值 set key value
设置多个值 mset key1 value1 key2 value2…
获取多个值 MGET key1 key2…
追加值 append key 追加的值 在字符串上追加
keys *
所有key
keys a*
所有a开头key的
同理keys 后面参数支持正则表达式
exists key 判断key是否存在 在就返回1 不再返回0
type key 键对应类型
del key1 key2 删除key和value
expire key xx 设置key指定时间过期
查看有效时间 ttl
redis.cn查文档
redis下如何存放hash
hash用于存放对象,一个key对象有多个属性、值,值的类型是string
设置: hset
获得键的一个属性: hget
获得键的多个属性:hmget
设置对象的多个属性 hmset
获取制定键所有属性: hkeys key
或者所有的值:hvals key
删除 hdel
设置过期时间 expire
list列表
value string 按顺序插
增:
lpush 左增 rpush右增
linsert key befor/after 中间插入
查:
同python一样,有其索引
查key的value列表内容:lrang key start end
取所有事 lrang key 0 -1
删除
lrem key count count大于0从左往右移出,小于0从右往左移出 0移出所有
改 lset
set 无序集合 没下标 没顺序
集合很容易的理解没有修改
添加:sadd key mmber1 member2
取: smember
删除值 srem
zset 有序集合 加了权重
每个元素都会关联一个double类型score 表示权重,,通过权重将元素从小到大排序
6.redis和python交互
7.搭建主从
和mysql一样,一个master拥有多个slave,一个slave又可以多个slave,一个主10个从
可以实现读写分离,数据备份,负载均衡
配置:
查看ip
修改配置redis.conf
从:复制主的配置文件修改为slave.conf slaveof表示主服务器是谁写上祝服务器的ip端口
port
查看主从服务,redis-cli 祝服务器ip info Replication
8.搭建集群
集群是一组相互独立,通过高速网络互联的计算机,构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放
当请求来首先由负载均衡服务器处理,把请求转发搭配另外的一台服务器上
redis集群:软件层面,硬件层面
软件就是一台电脑多个redis,硬件是多台服务器,每个服务器上一个或多个redis
集群至少三个主三个从
1.创建6个一样配置的redis
2.创建集群:
安装ruby环境,借助redis-trib.rb创建集群
写的时候是不能指定在哪个服务器,哪个巢写数据的,CRC16,二进制每16位提取最小幂指次数;
集群里没有谁是主谁是从,所有节点平等,,每个节点都保存各⾃的数据和整个集 群的状态。每个节点都和其他所有节点连接,⽽且这些连接保持活跃,这样就保 证了我们只需要连接集群中的任意⼀个节点,就可以获取到其他节点的数据
9.python集群交互
安装redis-py-cluster 包
statrup_nodes=[
{'host':'172.16.28.143','port':7000},
{主},
{主}
]
src = StrictRedisCluster(startup_nodes=列表startup_nodes)
b:字节