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)
- hdel key field1 field2
- ttl key
- 在左侧插入数据
- lpush key value1
- 在右侧插入数据
- rpush key value1
- 在指定元素的前或后插入新元素
- linsert key before或after 现有元素 新元素
- 获取所有元素
- lrange key 0 -1
- 修改指定元素的值
- lset key index(索引) value
- 删除
- lrem key count value
####set类型(无序)(值类型是string)
- lrem key count value
- 添加元素
- sadd key1 value1 value2
- 返回所有元素
- smembers key
- 删除元素
- srem key
####zset类型(有序)(值类型是string)
- srem key
- 添加
- zadd key score1(权重) member1
- 获取
- zrange key start stop
- 返回score值在min和max之间的成员
- zrangebyscore min max
- 查看成员member的score值
- zscore key member
-删除指定成员 - zrem key member1
- zscore key member
- 删除score在指定范围的元素
- zremrangebyscore key min max
redis命令文档
- http://doc.redisfans.com/
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