Redis
redis是nosql的一种数据库,是以key-value形式保存在内存中的,并且支持数据持久化
存储的一种非关系型数据库。
内存中:读取和写入速度非常快
持久化存储:写入磁盘或者文件(两种本分数据的方式.aof RDB)
支持主从配置
应用场景:图片验证码,手机验证码保存在redis中,session保存在redis
redis的安装
- step1:下载
> wget http://download.redis.io/releases/redis-4.0.9.tar.gz
- step2:解压
> tar xzf redis-4.0.9.tar.gz
- step3:移动,放到usr/local⽬录下
> sudo mv ./redis-4.0.9 /usr/local/redis/
- step4:进⼊redis⽬录
> cd /usr/local/redis/
- step5:生成
> sudo make
- step6:测试,这段运⾏时间会较⻓
> sudo make test
- step7:安装,将redis的命令安装到/usr/local/bin/⽬录
> sudo make install
- step8:安装完成后,我们进入目录/usr/local/bin中查看
> cd /usr/local/bin
> ls -all
- step9:配置⽂件,移动到/etc/⽬录下
- 配置⽂件⽬录为/usr/local/redis/redis.conf
> sudo cp /usr/local/redis/redis.conf /etc/redis/
配置
Redis的配置信息在/etc/redis/redis.conf下。
查看 sudo vi /etc/redis/redis.conf
绑定ip:如果需要远程访问,可将此⾏注释,或绑定⼀个真实ip
bind 127.0.0.1
端⼝,默认为6379
port 6379
是否以守护进程运⾏
如果以守护进程运⾏,则不会在命令⾏阻塞,类似于服务
如果以⾮守护进程运⾏,则当前终端被阻塞
设置为yes表示守护进程,设置为no表示⾮守护进程
推荐设置为yes
daemonize yes
数据⽂件
dbfilename dump.rdb
数据⽂件存储路径
dir /var/lib/redis
⽇志⽂件
logfile "/var/log/redis/redis-server.log"
数据库,默认有16个
database 16
主从复制,类似于双机备份。
slaveof
-
服务器端的命令为redis-server
-
sudo redis-server /etc/redis/redis.conf (指定的配置文件启动)
-
可以使⽤help查看帮助⽂档
redis-server --help
-
个人习惯
ps aux | grep redis 查看redis服务器进程
sudo kill -9 pid 杀死redis服务器
sudo redis-server /etc/redis/redis.conf 指定加载的配置文件 -
客户端的命令为redis-cli
-
可以使⽤help查看帮助⽂档
redis-cli --help
如果你在配置文件中设置了bind 内网地址, redis-cli -h 配置文件指定的bind后面的地址 -p exit
数据操作
string
设置键值 set key value 设置键值及过期时间,以秒为单位 setex key seconds value 设置多个键值 mset key1 value1 key2 value2 ... 追加值 append key value 获取:根据键获取值,如果不存在此键则返回nil get key 根据多个键获取多个值 mget key1 key2 ... 参数⽀持正则表达式 查看所有键 keys * 查看名称中包含a的键 keys 'a*' 判断键是否存在,如果存在返回1,不存在返回0 exists key1 查看键对应的value的类型 type key 删除键及对应的值 del key1 key2 ... 如果没有指定过期时间则⼀直存在,直到使⽤DEL移除 设置键'a1'的过期时间为3秒 expire 'a1' 3 查看有效时间,以秒为单位 ttl key
hash类型
- hash⽤于存储对象,对象的结构为属性、值
- 值的类型为string
设置单个属性
hset key field value
设置多个属性
hmset key field1 value1 field2 value2 ...
获取指定键所有的属性
hkeys key
获取⼀个属性的值
hget key field
获取多个属性的值
hmget key field1 field2 ...
获取所有属性的值
hvals key
删除整个hash键及值,使⽤del命令
删除属性,属性对应的值会被⼀起删除
hdel key field1 field2 ...
list类型
在左侧插⼊数据
lpush key value1 value2 ...
在右侧插⼊数据
rpush key value1 value2 ...
在指定元素的前或后插⼊新元素
linsert key before或after 现有元素 新元素
返回列表⾥指定范围内的元素
start、stop为元素的下标索引
索引从左侧开始,第⼀个元素为0
索引可以是负数,表示从尾部开始计数,如-1表示最后⼀个元素
lrange key start stop
索引从左侧开始,第⼀个元素为0
索引可以是负数,表示尾部开始计数,如-1表示最后⼀个元素
lset key index value
删除指定元素
将列表中前count次出现的值为value的元素移除
count > 0: 从头往尾移除
count < 0: 从尾往头移除
count = 0: 移除所有
lrem key count value
set类型
⽆序集合
元素为string类型
元素具有唯⼀性,不重复
说明:对于集合没有修改操作
添加元素
sadd key member1 member2 ...
返回所有的元素
smembers key
删除指定元素
srem key
zset类型
添加
zadd key score1 member1 score2 member2 ...
例1:向键'a4'的集合中添加元素'lisi'、'wangwu'、'zhaoliu'、'zhangsan',权重分别为4、5、6、3
zadd a4 4 lisi 5 wangwu 6 zhaoliu 3 zhangsan
索引可以是负数,表示从尾部开始计数,如-1表示最后⼀个元素
zrange key start stop
返回score值在min和max之间的成员
zrangebyscore key min max
返回成员member的score值
zscore key member
删除指定元素
zrem key member1 member2 ...
删除权重在指定范围的元素
zremrangebyscore key min max
与python交互
进入虚拟环境 安装 pip install redis
from redis import *
try:
sr = StrictRedis(host='localhost', port=6379, db=0)
# 简写
sr=StrictRedis()
#添加键name,值为itheima
result=sr.set('name','itheima')
#输出响应结果,如果添加成功则返回True,否则返回False
print(result)
#获取键name的值
result = sr.get('name')
#输出键的值,如果键不存在则返回None
print(result)
except Exception as e:
print(e)
主从搭建
修改配置文件
好处:1、读写分离
2、降低服务器的压力
3、提高数据的查询效率
4、备份数据的作用
如何搭建主从? 一主多
1主1从:两台服务器,有现在只有一台电脑,可以通过不同的端口来表示不同的redis服务
我们启动redis服务靠的是什么???
/etc/redis/redis.conf
需要有两个配置文件
1、将redis.conf复制一份:sudo cp redis.conf slave.conf
2、获取主机地址 ifconfig
3、主配置redis.conf
sudo vim redis.conf. bind 192.168.11.xxx. :wq退出vi
4、从配置 slave.conf
sudo vim slave.conf bind 192.168.11.xxx
port 6378
slaveof 192.168.11.xxx 6379
5、把现有的redis服务都关了
ps aux | grep redis
kill -9 xxx
service redis stop
停止所有服务后
6、sudo redis-server /etc/redis/redis.conf 启动主服务
sudo redis-server /etc/redis/slave.conf 启动从服务
7、ps aux | grep redis
8、redis-cli -h ip -p 6379
redis-cli -h ip -p 6378
搭建集群
配置
创建集群
安装ruby环境,因为redis-trib.rb是⽤ruby开发的
sudo apt-get install ruby
、好处: 建立在主从之上,包含主从的有点
提高可用性和可缩放性
2、配置 三主三从
~/Desktop/config
7000.conf
7001.conf
7002.conf
7003.conf
7004.conf
7005.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
启动服务:
由于不是在etc目录下
redis-server 7000.conf 一次启动
搭建集群:参考课件
五、python代码连接集群
pip install redis_py_cluster
from rediscluster import StrickRedisCluster
startup_nodes = [
# 只要其中有一个ip和端口是正确的,就可以进行连接
{"host":"xxx", "port":xxxx},
{"host":"xxx", "port":xxxx},
{"host":"xxx", "port":xxxx},
]
sr = StrickRedisCluster(startup_nodes=startup_nodes, decode_response=True)
sr.set()
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)