一、NoSQL
- 非关系型数据库
- 不支持sql语法
- 存储数据以key-value形式存在
二、redis特性及优势
- 特性
- 支持数据持久化,可以将内存中的数据保存到磁盘,重启后再次加载使用
- 除key-value类型数据,还提供list,set,zset,hash
- 支持数据备份,主从模式的数据备份
- 优势
- 高性能-读速度是11万次/s,写8.1万次/s
- 丰富的数据类型-redis支持二进制案例的strings,lists,hashes,sets及ordered sets数据类型操作
- 原子性
- 支持publish/subscribe,通知,key过期等特性
三、安装
- wget http://download.redis.io/releases/redis-4.0.9.tar.gz
- tar xzf redis-4.0.9.tar.gz
- sudo mv ./redis-4.0.9 /usr/local/redis/
- cd /usr/local/redis/
- sudo make
- sudo make test
报错: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 make install
- cd /usr/local/bin
- ls -all
- sudo cp /usr/local/redis/redis.conf /etc/redis/
四、string类型
- set key value
- setex key second value 设置一段时间过期的键值数据(以秒为单位)
- mset key1 value1 key2 value2 ... 设置多个键值数据
- append key value 追加值
- get key 获取值
- mget key1 key2 key3 获取多个值
五、键命令
- keys * 查看所有键
- keys a* 查看键中带有a的键
- exists key 判断键是否存在,存在返回1,不存在返回0
- type key 查看键对应的值的类型
- del key 删除键值对
- expire key second 设置键的过期时间,以秒为单位
- ttl key 查看有效时间,以秒为单位
六、hash类型
hash类型类似对象,一个对象内有多个不重复的属性
- hset key field value 设置单个属性
- hmset key field1 value1 field2 value2 . 设置多个属性
- hkeys key 获取指定键的所有属性
- hget key field 获取一个属性的值
- hmget key field1 field2 ... 获取多个属性的值
- hvals key 获取所有属性的值
- hdel key field1 field2 ... 删除属性
报错:misconf redis is configured to save RDB snapshots,but is currently not able to persist on disk
- 原因:
- 强制关闭Redis快照导致不能持久化。
- 解决方案:
- 运行config set stop-writes-on-bgsave-error no 命令后,关闭配置项stop-writes-on-bgsave-error解决该问题。
七、list类型
- lpush key value1 value2 ... 往左侧插入数据
- rpush key value1 value2... 往右侧插入数据
- linsert key before或after 现有元素 新元素 在指定元素的前或后插入数据
- lrange key start stop 从左侧开始获取一定量数据,索引可以是负数,表示从尾部开始
- lset key index value 设置指定索引位置的元素值
- lrem key count value 删除指定元素
八、set类型
无序集合
- sadd key member1 member2 ... 添加元素
- smembers key 返回所有元素
- srem key value 删除指定元素
九、zset类型
有序集合
- zadd key score1 member1 score2 member2 ... 添加(score表示权重,类似排序)
- zrange key start stop 获取指定范围内元素
- zrangebyscore key min max 返回score值在指定范围内的值
- zscore key member 返回member的score值
- zrem key member1 member2 ... 删除指定元素
- zremrangebyscore key min max 删除权重在指定范围的元素
十、python交互
from redis import StrictRedis
十一、搭建主从
- master用于写数据,单个
- slave用于读数据,可多个
-
配置主
- sudo vim redis.conf
- bind 本机ip地址
- sudo service redis stop
- sudo redis-server redis.conf
-
配置从
- sudo cp redis.conf ./slave.conf 复制/etc/redis/redis.conf
- sudo vim slave.conf 修改redis/slave.conf文件
- bind 主IP地址
- slaveof 主IP地址 6379
- port 6378
- sudo resid-server slave.conf 启动从服务
- redis-cli -h 主IP地址 info Replication
-
数据操作
- redis-cli -h 主IP地址 -p 6379 进入主
- redis-cli -h 主IP地址 -p 6378 进入从
十二、搭建集群
- redis集群搭建 http://www.cnblogs.com/wuxl360/p/5920330.html
- [Python]搭建redis集群 http://blog.5ibc.net/p/51020.html
- redis搭建集群官方文档 http://doc.redisfans.com/topic/cluster-tutorial.html
- 配置机器1
- 创建conf文件夹
- 创建7000.conf
- 创建conf文件夹
port 7000
bind 机器1IP地址
daemonize yes
pidfile 7000.pid
cluster-enabled yes
cluster-config-file 7000_node.conf
cluster-node-timeout 15000
appendonly yes
- 创建7001.conf
port 7001
bind 机器1IP地址
daemonize yes
pidfile 7001.pid
cluster-enabled yes
cluster-config-file 7001_node.conf
cluster-node-timeout 15000
appendonly yes
- 创建7002.conf
port 7002
bind 机器1IP地址
daemonize yes
pidfile 7002.pid
cluster-enabled yes
cluster-config-file 7002_node.conf
cluster-node-timeout 15000
appendonly yes
区别点port、pidfile、cluster-config-file三项
- 启动
redis-server 7000.conf
redis-server 7001.conf
redis-server 7002.conf
- 配置机器2
- 同机器1,port向后叠加,pidfile、cluster-config-file随之更改
- 创建集群
- 在机器1中
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
-- 然后重新执⾏
- 必须要3个或以上的主节点,否则在创建集群时会失败,并且当存 活的主节点数⼩于总节点数的⼀半时,整个集群就⽆法提供服务了
- python交互
- pip install redis-py-cluster
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)