redis 数据库
官方网站:http://www.redis.cn/
命令参考文档:http://doc.redisfans.com/
中文文档: http://www.redis.cn/cmmands.html
- nosql 不支持 sql 语法的操作!
- 存储的数据结构和关系型结构不一样!
存储的形式:key --> value - 每一个不同的 nosql 数据库有自己的语言和 api !
nosql 和 sql 对比
@ 使用场景不一样
@ 事务特性的支持,nosql基本不支持,关系型非常完善
1. redis简介与安装
@ 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。
@ 特性:
- 内存数据库,速度快,也支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
- 支持事务.
@ 优势:
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。(事务)
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
@ 应用场景
- 缓存
- 替代传统数据库 – 比如社交类应用
- session共享、购物车
- …
@ 压缩包安装目录
- 编译安装
make
make test
make install
- 安装目录
/usr/local/bin
/redis-server redis服务
/redis-cli redis命令行客户端
/redis-benchmark redis性能测试工具
/redis-check-aof AOF文件修复工具
/redis-check-rdb RDB文件检索工具
- 配置文件移动到 /etc/ 目录下
sudo cp /usr/local/redis/redis.conf /etc/redis/
```redis.conf
# 绑定的IP,default=127.0.0.1
bind IP
# 绑定端口号 default=6379
port
# 是否守护进程启动 default=no
daemonize yes
# 数据文件
dbfilename dump.rdb
# 数据文件存储路径 default=./
dir ./
# 日志文件
logfile
# 数据库,default=16
dbsize 16
# 主从复制,类似于双机备份
slaveof
注:目录没有的话县手动创建出来,否则启动redis的时候会报错误,启动不成功!!!
```
- redis-server --help
2. redis数据类型及操作
五大类型:string、hash、list、set、zset
hash、list、set、zset 中的 value 必须是 string
- 键命令
keys *
keys key-name
keys a*
exists key 判断键是否存在
type key-name 查看数据类型
del k1 k2 k3 ... 删除key
expire key seconds 设置键的过期时间
ttl key 查看键过期时间还有多少秒
- string 基于二进制安全的,最多容纳 512M
# 设置单个键值对
set name value
get name
# 设置键的过期时间
setex key seconds value
# 一下设置多个键值对
mset k1 v1 k2 v2 k3 v3 ...
mget
# 追加值
append key value
- hash 用于存储对象
# 设置单个属性
hset key filed value
hget
# 设置多个属性值
hmset key filed1 value1 filed2 value2 ...
hmget
# 获取所有属性值
hvals
hkeys
# 删除
hdel key field1 filed2
- list
# 左侧插
lpush key v1 v2 v3 ..
# 右侧插
rpush key v1 v2 v3 ..
# 中间某元素插
insert key before或after 现有元素 新元素
# 获取
lrange key start stop start和stop是包含在内的; stop可以为负数的
# 设置指定索引位置元素的值
lset key index value
# 从左往右移除
lrem key count value
# 从右往左移除 用 count=负值 -
- set
无序集合,里面每个值是string类型
# 添加
sadd key mem1 [mem2 mem3 ...]
# 获取
smembers key
# 删除
srem key mem1 [mem2 mem3 ...]
- zset
- 有序集合,权重概念
- 元素为string类型
- 元素具有唯一性,不重复
- 每个元素都会关联一个 double 类型的 score,表示权重,通过权重将元素从小到大排序
说明:没有修改操作
# 添加
zadd key score1 mem1 [score2 mem2 score3 mem3 ...]
# 获取
zrange key
zrangebyscore
zscore key mem
# 删除
zrem key member [member ...]
3. redis 集群
软件层面的集群、硬件层面的集群
集群:一组通过网络连接的计算机,共同对外提交服务,像一个独立的服务器,提高redis对外处理任务的能力。
redis集群实现 https://www.freesion.com/article/2933444170/
#配置 7000.conf
port 7000
bind 127.0.0.1
daemonize yes
pidfile 7000.pid
cluster-enable yes
cluster-config-file 7000_node.conf
cluster-node-timeout 15000
appendonly yes
# 配置 7001.conf
port 7001
bind 127.0.0.1
daemonize yes
pidfile 7001.pid
cluster-enable yes
cluster-config-file 7001_node.conf
cluster-node-timeout 15000
appendonly yes
# 配置 7002.conf
port 7002
bind 127.0.0.1
daemonize yes
pidfile 7002.pid
cluster-enable yes
cluster-config-file 7002_node.conf
cluster-node-timeout 15000
appendonly yes
sudo reids-server ./7000.conf
sudo reids-server ./7001.conf
sudo reids-server ./7002.conf
sudo cp /usr/share/doc/redis-tools/examples/redis-trib.rb /usr/local/bin
会出错因为是Ruby语言;记得安装Ruby
redis-trib.rb create --replicas 1 IP1:port1 IP1:port2 IP1:port3 IP2:port1 IP2:port2 IP2:port3
–replicas 集群中节点创建
槽slot CRC16(key)/16864 取余数
set age=11
4. redis 与 python 交互
pip install redis
StrictRedis对象
from redis import StrictRedis
if __name__ == '__main__':
try:
sr = StrictRedis(host='',port=6379,db=0)
res = sr.set('name','test') #添加
res = sr.get('name') #获取;如果取不到值的话显示null
res = sr.set('name','ttt') #修改
res = sr.delete('name'[,'name3','name2']) #删除;也可删除多个key;返回删除成功的个数
res = sr.keys()
print(res)
except Exception as e:
print(e)
- redis存储session
pip installdjango-redis-sessions==0.5.6
默认存储在 django_session数据表中
设置redis存储redis的配置
SESSION_ENGINE='redis_session.session'
SESSION_REDIS_HOST='localhost'
SESSION_RESDIS_PORT=6379
SESSION_REDIS_DB=0
SESSION_REDIS_PASSWOED=''
SESSION_REDIS_PREFIX='session'
常用命令
/etc/init.d/redis-server stop
/etc/init.d/redis-server start
/etc/init.d/redis-server restart
redis-cli -h <hostname> -p <port>
-
// redis中:
-
select 1 # 切换到db1,默认在db0
keys * # 查看所有键
type “键”. # 查看键的数据类型
flushdb. # 清空当前的db
flushall # 清空所有db
// 开启同步
redis-cli SLAVEOF xxx 6379
// 关闭同步
redis-cli SLAVEOF NO ONE
// 查看复制状态
redis-cli info Replication