Infi-chu:

http://www.cnblogs.com/Infi-chu/

一、NoSQL(Not only SQL)
1.泛指非关系数据库
2.不支持SQL语法
3.存储结构与传统的关系型数据库不同,NoSQL的存储形式是key-value形式
4.NoSQL中没有通用语言,每种NoSQL都有自己的api和语法,以及擅长的业务场景
5.产品种类较多:
    Redis
    MongoDB
    Hbase Hadoop
    Cassandra Hadoop

二、NoSQL与SQL比较
1.适应场景不同:
    SQL:关系比较复杂的数据查询场景
    NoSQL:与SQL相反
2.事务特性的支持:
    SQL:非常完善
    NoSQL:基本不支持
3.两者取长补短,在慢慢融合

三、Redis特性
1.Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载使用
2.不仅支持key-value,还支持set、zset、list、hash等数据结构存储
3.Redis支持数据的备份,Master-Slave模式

四、Redis优势
1.性能高。读能力:110000次/秒,写能力:81000/秒
2.丰富的数据类型。Redis支持二进制案例的Strings,Lists,Hashes,Sets及Ordered Sets数据类型操作
3.原子。Redis的所有操作都是原子性的,Redis还支持对几个操作合并后的原子性执行
4.丰富的特性。Redis支持publish/subscribe,通知,key过期等

五、Redis应用场景
1.用来做缓存
2.在某些特定的应用场景下替代传统数据库——社交类
3.在一些大型系统中,实现一些特定的功能——session共享、购物车

六、Redis核心配置
1.配置文件(通常情况):
/etc/redis/redis.conf
2.绑定ip,如果需要远程,可绑定真实ip:
bind 127.0.0.7
3.端口(默认6379):
port 6379
4.是否以守护进程运行:
    *如果以守护进程运行,则不会再命令行阻塞,类似于服务
    *如果以非守护进程运行,则当前终端被阻塞
    *设置为yes表示守护进程,no为非守护进程
daemonize yes
5.数据文件:
dbfilename dump.rdb
6.日志文件:
logfile */var/log/redis/redis-server.log*
7.数据库(默认16个):
database 16
8.主从复制,类似于双机备份
slaveof

七、Redis启动
1.服务端:
ps aux |grep redis    # 查看redis服务进程
kill -9 pid # 杀死redis服务
redis-server /etc/redis/redis.conf # 指定加载的配置文件
2.客户端:
redis-cli
select 10 # 切换数据库
ping    # ping ip

八、数据操作
1.string
    常用语
    keys 正则
    set
    get
    mset key1 value1 key2 value2    # 多set操作
    mget key1 key2     # 多get操作
    append    # 追加
    del    key    # 删除
    setex key time value    # 设置过期时间
    exists key # 判断键是否存在,存在返回1,否则0
    type key # key类型
    ttl key    # 查看过期时间
    expire key time    # 对于已有键设置过期时间
2.hash(存储的是对象)
    常用语
    keys 正则
    hest key field value    # 设置key的属性field的value
    hmset key field1 value1 field2 value2
    hget key field
    hmget key1 key2
    hdel key filed
3.list
    常用语
    lrem key count value    # count>0,从头往尾移除;count<0,从尾往头移除;count=0,移除所有
    lset key index value    # 修改索引下标的值
    lpush key value1 value2 # 在键的左侧加入value1/value2
    rpush key value1 value2 # 在键的右侧加入value1/value2
    linsert key before/after value1 value2    # 在该键的value1元素的前/后插入value2元素
    lrange key start stop    # 从start下标索引开始取,到stop索引为止
4.set
    常用语
    sadd key value1 value2    # 添加value1
    smembers key    # 获取所有元素
    sismember key value    # 判断元素是否在集合中
    srem key    # 删除键
5.zset(有序集合)
    常用语
    zadd key score1 value1 score2 value2    # 添加vlaue1,value2,权重分别是score1,score2
    zrange key start stop    # 获取key中的元素,从start开始至stop
    zrangebyscore key min max    # 获取key中权重在min和max之间的成员(值)
    zscore key value    # 获取键的value的score
    zrem key value1 value2    # 删除指定键中的value
    zremrangebyscore key min max    # 删除键中score在min至max之间的元素
【注】
集合没有修改操作

九、Python操作Redis
1.安装:
pip install redis
2.导入:
from redis import StrictRedis
3.eg.
db = StrictRedis(host="127.0.0.1",port=6379)
db.set(key,value)

十、各个数据类型包含方法:
1.string
    set
    setex
    mset
    append
    get
    mget
    key
2.keys
    exists
    type
    delete
    expire
    getrange
    ttl
3.hash
    hset
    hmset
    hkeys
    hget
    hmget
    hvals
    hdel
4.list
    lpush
    rpush
    linsert
    lrange
    lset
    lrem
5.set
    sadd
    smembers
    srem
6.zset
    zadd
    zrange
    zrangebyscore
    zscore
    zrem
    zremrangebyscore

十一、Redis主从
1.master配置:
vim /etc/redis/redis.conf
bind master_ip
2.slave配置:
cp redis.conf slave.conf
vim slave.conf
bind master_ip
salveof slave_ip:port
port master_port
redis-server slave.conf
3.查看主从关系:
redis-cli -h master_ip info Replication

十二、集群
1.一主可以多从,但是当访问量过大时(1000W),主服务器可能就会挂掉,或发生自然灾害等
2.服务器需要分布多地
3.集群是一组相互独立、通过高速网络互连的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群就像是一个独立的服务器。集群配置是用于提高高可用性和可缩放性

十三、Redis集群
1.7000.conf
    port 7000
    bind 172.16.179.130
    daemonize yes
    pidfile 7000.pid
    cluster-enabled yes
    cluster-config-file 7000_node.conf
    cluster-node-timeout 15000
    appendonly yes
2.7001.conf
    port 7001
    bind 172.16.179.130
    daemonize yes
    pidfile 7001.pid
    cluster-enabled yes
    cluster-config-file 7001_node.conf
    cluster-node-timeout 15000
    appendonly yes
3.7002.conf
    port 7002
    bind 172.16.179.130
    daemonize yes
    pidfile 7002.pid
    cluster-enabled yes
    cluster-config-file 7002_node.conf
    cluster-node-timeout 15000
    appendonly yes
4.启动
    redis-server 7000.conf
    redis-server 7001.conf
    redis-server 7002.conf
【注】以上机器在172.16.179.130上,三个文件的配置区别在port、pidfile、cluster-config-file三项
5.7003.conf
    port 7003
    bind 172.16.179.131
    daemonize yes
    pidfile 7003.pid
    cluster-enabled yes
    cluster-config-file 7003_node.conf
    cluster-node-timeout 15000
    appendonly yes
6.7004.conf
    port 7004
    bind 172.16.179.131
    daemonize yes
    pidfile 7004.pid
    cluster-enabled yes
    cluster-config-file 7004_node.conf
    cluster-node-timeout 15000
    appendonly yes
7.7005.conf
    port 7005
    bind 172.16.179.131
    daemonize yes
    pidfile 7005.pid
    cluster-enabled yes
    cluster-config-file 7005_node.conf
    cluster-node-timeout 15000
    appendonly yes
【注】以上机器在172.16.179.131上,三个文件的配置区别在port、pidfile、cluster-config-file三项    
8.启动
    redis-server 7003.conf
    redis-server 7004.conf
    redis-server 7005.conf

9.安装ruby环境
10.创建集群
cp /usr/share/doc/redis-tools/examples/redis-trib.rb /usr/local/bin/
redis-trib.rb create --replicas 1 172.16.179.130:7000 172.16.179.130:7001 172.16.179.130:7002 172.16.179.131:7003 172.16.179.131:7004 172.16.179.131:7005

十四、验证集群
redis-cli -h 172.16.179.131 -c -p 7002
set test_name test_value

十五、在哪个服务器上写数据(CRC16算法)
    1.redis cluster在设计的时候,就考虑到了去中心化,去中间件,也就是说,集群中 的每个节点都是平等的关系,都是对等的,每个节点都保存各⾃的数据和整个集 群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保 证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据
    2.Redis集群没有并使用传统的一致性哈希来分配数据,而是采用另外一种叫做哈希槽 (hash slot)的方式来分配的。redis cluster 默认分配了 16384 个slot,当我们 set一个key 时,会用CRC16算法来取模得到所属的slot,然后将这个key 分到哈 希槽区间的节点上,具体算法就是:CRC16(key) % 16384。所以我们在测试的 时候看到set 和 get 的时候,直接跳转到了7000端口的节点
    3.Redis 集群会把数据存在一个 master 节点,然后在这个 master 和其对应的salve 之间进行数据同步。当读取数据时,也根据一致性哈希算法到对应的 master 节 点获取数据。只有当一个master 挂掉之后,才会启动一个对应的 salve 节点,充当 master
    【注】必须要3个或以上的主节点,否则在创建集群时会失败,并且当存 活的主节点数小于总节点数的一半时,整个集群就无法提供服务了

十六、Python与集群交互
1.安装:
pip install redis-py-cluster
2.eg.
from rediscluster import *
if __name__ == '__main__':
  try:
    # 构建所有的节点,Redis会使⽤CRC16算法,将键和值写到某个节点上
    startup_nodes = [
        {'host': '192.168.26.128', 'port': '7000'},
        {'host': '192.168.26.130', 'port': '7003'},
        {'host': '192.168.26.128', 'port': '7001'},
    ]
    # 构建StrictRedisCluster对象
    src=StrictRedisCluster(startup_nodes=startup_nodes,decode_responses=True)
    # 设置键为name、值为itheima的数据
    result=src.set('name','itheima')
    print(result)
    # 获取键为name
    name = src.get('name')
    print(name)
  except Exception as e:
    print(e)

Redis Python(二)的更多相关文章

  1. Redis系列(二):Redis的数据类型及命令操作

    原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis 中常用命令 Redis 官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis 命令参考.这 ...

  2. redis入门(二)

    目录 redis入门(二) 前言 持久化 RDB AOF 持久化文件加载 高可用 哨兵 流程 安装部署 配置技巧 集群 原理 集群搭建 参考文档 redis入门(二) 前言 在redis入门(一)简单 ...

  3. redis(二)高级用法

    redis(二)高级用法 事务 redis的事务是一组命令的集合.事务同命令一样都是redis的最小执行单元,一个事务中的命令要么执行要么都不执行. 首先需要multi命令来开始事务,用exec命令来 ...

  4. python 二维数组读入

    study from : https://www.cnblogs.com/reaptomorrow-flydream/p/9613847.html python 二维数组键盘输入 1 m = int( ...

  5. Ubuntu上面安装Redis Python

    Ubuntu上面安装Redis Python 1,下载redis源码https://redis.io/download,下载地址:http://124.205.69.169/files/A092000 ...

  6. Python 二维码制作

    Python 二维码制作 先介绍python 二维码制作的第三方库 QRCode .MyQR QRCode    生成这个二维码只用三行 import qrcode img = qrcode.make ...

  7. redis(二)redis的主从模式和集群模式

    redis(二)redis的主从模式和集群模式 主从模式 集群模式 主从模式 redis的主从模式,指的是针对多台redis实例时候,只存在一台主服务器master,提供读写的功能,同时存在依附在这台 ...

  8. 【Docker】 使用Docker 在阿里云 Centos7 部署 MySQL 和 Redis (二)

    系列目录: [Docker] CentOS7 安装 Docker 及其使用方法 ( 一 ) [Docker] 使用Docker 在阿里云 Centos7 部署 MySQL 和 Redis (二) [D ...

  9. Python操作Redis(二)

    List操作 redis中的List在在内存中按照一个name对应一个List来存储.如图: lpush(name,values) # 在name对应的list中添加元素,每个新的元素都添加到列表的最 ...

随机推荐

  1. 华为云OCR文字识别 免费在线体验!

    嘿,华为云OCR文字识别了解一下,免费在线体验! 物流行业快速提取运单信息.医疗/保险行业单据快速录入.政务办事人证检验,你知道这些都是如何实现的么? 答案就是:OCR文字识别! 作为AI时代效率倍增 ...

  2. [转载]C++中四种强制类型转换方式

    C++中四种强制类型转换方式 原文地址:http://www.cnblogs.com/home123/p/6763967.html 类型转换有c风格的,当然还有c++风格的.c风格的转换的格式很简单( ...

  3. Spring bean 初始化失败

    在一个*context.xml 配置文件 A 中, 有个定义的bean B, 把 A 添加到 application-context.xml 中,发现B不能正常初始化. 解决办法: 添加 <co ...

  4. 洛谷 3111 [USACO14DEC]牛慢跑Cow Jog_Sliver 题解

    本蒟蒻又来发题解了, 一道较水的模拟题. 题意不过多解释, 思路如下: 在最开始的时候求出每头牛在t秒的位置(最终位置 然后,如果后一头牛追上了前一头牛,那就无视它, 把它们看成一个整体. else ...

  5. Spring整合Shiro 权限 角色 用户关系分析

    Spring整合Shiro 权限 角色 用户关系分析 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 前置内容 之前我们学习了,使用注解的方式去完成权限的控制,当然,也是静态的,也就 ...

  6. Python深入之python内存管理机制(重点)

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:醍醐三叶   关于python的存储问题, (1)由于python中 ...

  7. springboot中实现kafa指定offset消费

    kafka消费过程难免会遇到需要重新消费的场景,例如我们消费到kafka数据之后需要进行存库操作,若某一时刻数据库down了,导致kafka消费的数据无法入库,为了弥补数据库down期间的数据损失,有 ...

  8. [vue]初探生命周期

    Vue 实例从创建到销毁的过程,就是生命周期.也就是从开始创建.初始化数据.编译模板.挂载Dom→渲染.更新→渲染.卸载等一系列过程,我们称这是 Vue 的生命周期. 一.创建/销毁,缓存 1.cre ...

  9. Python3 网络编程基础1

    目录 开发架构 C/S架构 B/S架构 OSI模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 TCP协议 socket 开发架构 C/S架构 client 和 server, 既客户 ...

  10. Day 02 作业

    作业 一 什么是编程? 基于编程语言的语法格式将自己脑中里想让计算机做的事,写到文件中. 二 简述计算机五大组成 控制器,运算器,存储器,输入设备,输出设备 三 操作系统有什么用? 操作系统直接与硬件 ...