内容概述:
Redis、Git
Redis
NoSQL 介绍
一类新出现的数据库(not only sql)
- 泛指非关系型的数据库
- 不支持 SQL 语法
- 存储结构跟传统关系型数据库中的那种关系表完全不同, nosql 中存储的数据都是 KV 形式。
- NoSQL 的世界中没有一种通用的语言,每种 nosql 数据库都有自己的 api 和语法,以及擅长的业务场景
- NoSQL 中的产品种类相当多,例如:Mongoddb、Redis、Hbase hadoop、Cassandra hadoop
NoSQL 和 SQL 数据库的比较
使用场景不同:sql 数据库适合用于关系特别复杂的数据查询场景,nosql 反之;
“事务” 特性的支持:sql 对事务的支持非常完善,而 nosql 基本不支持事务;
两者在不断地取长补短,呈现融合趋势。
Redis 特性
Redis 与其他 key - value 缓存产品有以下三个特点:
Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用;
Redis 不仅仅支持简单的 key - value 类型的数据,同时还提供 String、hash、list、set、zset 等数据结构的存储;
Redis 支持数据的备份,即 master - slave 模式的数据备份
Redis 优势
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
数据操作
数据类型:
String(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)
String
如果设置的键不存在则为添加,如果设置的键已经存在则修改
get 获取值时,键不存在不会报错
设置值:set 键名 值 EX 过期时间(单位:秒)
**设置键值及过期时间,以秒为单位:**setex key seconds value
获取值:get 键名
设置多个值:mset 键1 值1 键2 值2 。。。
获取多个值: mget 键1 键2 。。。
**追加:**append 键 值
键命令
查看键: keys 正则 keys * (查看所有键)
判断键是否存在: exists key
**查看键的类型: ** type key
删除对应的值: del key
设置 key 过期的时间: expire key 时间
hash
hash⽤于存储对象,对象的结构为属性、值
值的类型为string
**设置:**hset key(键名) field(字段) value(值)
获取指定键所有的属性: hkeys key
**获取一个属性的值:**hget key field
**获取多个属性的值:**hmget key field1 field2 …
获取所有属性的值: hvals key
**删除:**删除整个hash键及值,使⽤del命令;删除属性,属性对应的值会被⼀起删除
hdel key field1 field2 …
list
列表的元素类型为string
按照插⼊顺序排序
增加:
左侧添加: lpush key value1 value2
右侧添加: rpush key value1 value2
**在指定位置前或后插入元素:**linsert key before或after 现有元素 新元素
**获取: **lrange key start stop
修改: lset key index value
删除: lrem key count value(指定的值)
count 是指定的数字:小于 0 ,从尾往头删;大于 0 ,从头到尾;等于 0 ,清空
set
- ⽆序集合
- 元素为string类型
- 元素具有唯⼀性,不重复
- 说明:对于集合没有修改操作
添加元素: sadd key member1 member2 …
获取: smembers key
删除: srem key
zset
- sorted set,有序集合
- 元素为string类型
- 元素具有唯⼀性,不重复
- 每个元素都会关联⼀个double类型的score,表示权重,通过权重将元素从⼩到⼤排序
- 说明:没有修改操作
**添加:**zadd key score1 member1 score2 member2 …
**获取:**zrange key start stop
- 返回指定范围内的元素
- start、stop为元素的下标索引
- 索引从左侧开始,第⼀个元素为0
- 索引可以是负数,表示从尾部开始计数,如-1表示最后⼀个元素
删除指定元素: zrem key member1 member2 …
**删除权重在指定范围的元素:**zremrangebyscore key min max
与 python 交互
from redis import StrictRedis
def demo():
# 创建对象,与 redis 服务器建立连接
sr = StrictRedis(host='127.0.0.1')
try:
result = sr.set('name', 'xiaohei')
print(result)
except Exception as e:
print(e)
if __name__ == '__main__':
demo()
主从服务器
根据教程搭建即可
(error) NOAUTH Authentication required.
这是认证,输入密码即可
使用命令:
auth "yourpassword"
搭建集群
在 Ubuntu 中搭建:
cd ~/Desktop/Flask makdir conf touch 7000.conf / 7001.conf / 7002.conf gedit 7000.conf / 7001.conf / 7002.conf 输入内容: port 7000 bind 192.168.195.133 daemonize yes pidfile 7000.pid cluster-enabled yes cluster-config-file 7000_node.conf cluster-node-timeout 15000 appendonly yes 对对应的文件修改端口, 这几个是主服务器 启动服务器: redis-server 7000.conf redis-server 7001.conf redis-server 7002.conf 配置从服务器: touch 7003.conf / 7004.conf / 7005.conf gedit 7003.conf / 7004.conf / 7005.conf 输入内容: port 7003 bind 192.168.195.133 daemonize yes pidfile 7003.pid cluster-enabled yes cluster-config-file 7003_node.conf cluster-node-timeout 15000 appendonly yes 对对应的文件修改端口, 这几个是从服务器 启动服务器: redis-server 7003.conf redis-server 7004.conf redis-server 7005.conf
创建集群:
将 redis-trib.rb 命令加到命令文件夹中 sudo cp /usr/share/doc/redis-tools/examples/redis-trib.rb /usr/local/bin/ 安装 ruby sudo apt-get install ruby -- 先查看⾃⼰的 gem 源是什么地址 gem source -l -- 如果是https://rubygems.org/ 就需要更换 -- 更换指令为 gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/ -- 通过 gem 安装 redis 的相关依赖 sudo gem install redis -- 然后执⾏指令 redis-trib.rb create --replicas 1 192.168.195.133:7000 192.168.195.133:7001 192.168.195.133:7002 192.168.195.133:7003 192.168.195.133:7004 192.168.195.133:7005 输入 yes, 提示完成,搭建集群成功。
加参数 c 表示连接到集群
redis-cli -h 192.168.195.133 -c -p 7000
与 python 交互
下载库 :
pip install redis-py-cluster
# 导入 redis 集群库
from rediscluster import StrictRedisCluster
def demo():
# 存入集群信息
startup_nodes = [
{'host': '192.168.195.133', 'port': 7000},
{'host': '192.168.195.133', 'port': 7001},
{'host': '192.168.195.133', 'port': 7002}
]
# 创建对象,与 redis 集群进行连接
src = StrictRedisCluster(startup_nodes=startup_nodes, decode_responses=True)
try:
result = src.set('name', 'goudan') # 集群会随机写入值
print(result)
print(src.get('name'))
except Exception as e:
print(e)
if __name__ == '__main__':
demo()
Git
Git 之前研究了一下,做了笔记,比较多,不方便直接放上了,放上 GitHub 的地址,有兴趣的可以下载去看。