nosql特点

  • 不支持sql语法
  • 存储结构与传统关系型数据库中的那种关系表完全不同,nosql中存储的数据都是kv形式
  • nosql的世界中没有一种通用的语言,每种nosql数据库都有自己的api和语法,以及擅长的业务场景

nosql与sql数据库的比较

  • 适用场景不同,sql数据库市和用于关系特别复杂的数据查询场景,nosql反之
  • 事务特性的支持,sql对事务的支持非常完善,nosql基本上不支持事务

安装redis时报错

  • You need tcl 8.5 or newer in order to run the Redis test
  • 解决办法
    wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
    sudo tar xzvf tcl8.6.1-src.tar.gz -C /usr/local/
    cd /usr/local/tcl8.6.1/unix/
    sudo ./configure
    sudo make
    sudo make install

启动服务端

  • 启动
  • sudo redis-server /etc/redis/redis.conf
  • 停止
  • sudo kill -9 pid(进程号)
  • 重启
  • sudo server redis restart
  • 查看进程
  • ps aux | grep redis

客户端

  • 客户端的命令为
  • redis-cli
  • 连接redis
  • redis-cli
  • 切换数据库
  • select n(0-15)

数据结构

  • redis是key-value的数据结构,每条数据都是一个键值对
  • 键的类型是字符串
  • 注意:键不能重复
  • 值的类型
  • 字符串string
  • 哈希hash
  • 列表list
  • 集合set
  • 有序集合zset
    ####string类型
  • 保存-获取
  • 设置键值
  • set key value
  • get key
  • 设置键值以及过期时间,以秒为单位
  • setex key secondes value
  • 设置多个键值
  • mset key1 value1 key2 value2
  • mget key1 key2
  • 追加值
  • append key value

键命令

  • 查看所有键
  • keys *
  • 查看键是否存在
  • exists key
  • 查看键对应的value的类型
  • type key
  • 删除键以及对应的值
  • del key
  • 设置过期时间
  • expire key time
  • 查看有效时间
  • ttl key
    ####hash类型(值类型只能是string)
  • 设置单个属性
  • hset key field(属性)value
  • 设置多个属性(获取)
  • hmset key field1 value1 field2 value2
  • hmget key field1 field2
  • 查看键所有的属性
  • hkeys key
  • 获取一个属性的值
  • hget key field
  • 获取所有属性的值
  • hvals key
  • 删除属性,属性对应的值会一起删除
  • hdel key field1 field2
    ####list类型(值类型是string)
  • 在左侧插入数据
  • lpush key value1
  • 在右侧插入数据
  • rpush key value1
  • 在指定元素的前或后插入新元素
  • linsert key before或after 现有元素 新元素
  • 获取所有元素
  • lrange key 0 -1
  • 修改指定元素的值
  • lset key index(索引) value
  • 删除
  • lrem key count value
    ####set类型(无序)(值类型是string)
  • 添加元素
  • sadd key1 value1 value2
  • 返回所有元素
  • smembers key
  • 删除元素
  • srem key
    ####zset类型(有序)(值类型是string)
  • 添加
  • zadd key score1(权重) member1
  • 获取
  • zrange key start stop
  • 返回score值在min和max之间的成员
  • zrangebyscore min max
  • 查看成员member的score值
  • zscore key member
    -删除指定成员
  • zrem key member1
  • 删除score在指定范围的元素
  • zremrangebyscore key min max
redis命令文档

pycharm连接redis数据库

  • 设置redis存储session信息
    - SESSION_ENGINE = ‘redis_sessions.session’
  • 连接redis
    - SESSION_REDIS = {
    ‘host’:‘localhost’,主机ip
    ‘port’: ‘6379’,端口号
    ‘db’: 2,redis哪个数据库
    ‘password’: ‘’,
    ‘prefix’: 'session’前缀
    }

redis主从配置

  • 复制redis.conf文件为slave.conf
  • sudo cp redis.conf slave.conf
  • 修改配置文件
  • 端口号port:6378
  • 添加slaveof 192.168.xx.xxx 6379
  • 查看主从关系
  • 主关系redis-cli -h 192.168.xx.xxx info Replication
  • 从关系redis-cli -h 192.168.xx.xxx -p 6378 info Replication
  • 启动主从redis
  • 主sudo redis-server /etc/redis/redis.conf
  • 从sudo redis-server /etc/redis/slave.conf
  • 一个master可以有多个slave,一个slave也可以有多个slave
  • 主master用来写数据,slave用来读取数据 slave备份master
  • 通过主从配置实现读写分离
  • master和slave都是一个redis实例(redis服务)

集群

  • 一组通过网络连接的计算机,共同对外提供服务,像一个独立的服务器。提高一个对外处理的能力
    ###redis集群
  • 软件层面
  • 硬件层面
  • 软件层面:只有一台电脑,在这个电脑上启动了多个redis服务
  • 硬件层面:存在多台实体的电脑,每台电脑上都启动了一个或者多个redis服务

配置集群

一台电脑
  • 在文件夹中创建conf目录
  • 在conf目录下创建文件7000.conf,7001.conf,7002.conf
  • 使用配置文件启动redis服务
  • sudo redis-server ./7000.conf
  • sudo redis-server ./7001.conf
  • sudo redis-server ./7002.conf
  • 复制命令
  • sudo cp /usr/share/doc/redis-tools/examples/redis-trib.rb /usr/local/bin/
  • 安装ruby环境,因为rendis-trib.rb是用ruby开发的
  • sudo apt install ruby
  • 运行命令创建集群
  • redis-trib.rb create --replicas 1 xx.xx.xx.xx:7000~~xx.xx.xx.xx:7005
  • 运行出错,查看ruby是否是最新版gem source -l
另一台电脑
  • 在文件夹中创建conf目录
  • 在conf目录下创建文件7003.conf,7004.conf,7005.conf
  • 使用配置文件启动redis服务
  • sudo redis-server ./7003.conf
  • sudo redis-server ./7004.conf
  • sudo redis-server ./7005.conf
数据验证
  • 连接到7002节点
    - redis-cli-h xx.xx.xx.xxx -c -p 7002
  • redis cluster默认分配了16348个slot(槽)
  • 用CRC16算法来获取数据应该存到哪个主节点上,算法为 CRC16(key)%16384
  • 必须要3个以上的主节点,否则创建集群时会失败,并且当存活的主节点数小于总节点数的一半时,·整个集群就无法提供服务
集群与python交互
  • 安装包
    - pip install redis-py-cluster