redis(默认端口6379)
它是一种非关系型数据库,他的数据保存在内存当中,所以存储非常快,但也可以刷到硬盘上。
redis的使用场景(时时在变化,但数据还不是那么重要)
一、登陆会话存储:cookie和session
二、排行版/计数器:比如一些秀场类的项目。
三、作为消息队列:celery就是使用redis作为中间人
四、一些常用的数据缓存
五、好友关系
六、发布和订阅功能
redis和memcached比较
redis的安装与使用
首先编译安装redis wget http://download.redis.io/releases/redis-5.0.0.tar.gz tar -zxvf redis-5.0.0.tar.gz yum install gcc yum install gcc-c++ make cp src目录下的redis-server /usr/bin/ 服务端启动文件 cp src目录下的redis-cli /usr/bin/ 客户端启动文件 而后启动redis-server redis-server & 安装好后执行如下命令就可以进入到redis: redis-cli –p 6379 –h 127.0.0.1 redis的启动: redis-server redis的进入: redis-cli –p 6379 –h ip redis的停止:进入数据库后输入 shutdown redis的配置文件修改后如何加载? redis-server redis.cnf的绝对路径 &
编译安装出现的问题
报这个错误的意思是说链接redis 时只能通过本地localhost (127.0.0.1)这个来链接,而不能用网络ip(192.168..)这个链接,解决方法如下:
一、停掉redis,使用ps查看有关redis所有的进程,全部杀死
二、打开redis配置文件,注释掉bind 127.0.0.1
daemonize yes 这是redis的默认守护进程,打开它,把yes修改为no
protected-mode no 这是redis的保护模式,把yes修改为no
设置密码 requirepass redis123
三、以加载配置文件的方式启动让修改的配置生效
四、进入后输入密码 auth 密码 即可排除此错误。
如果使用make不能安装,报错,使用如下命令:make MALLOC=libc
字符串
添加:
setkey value
查询:
get key
删除:
delkey
过期时间的设置:没过期之间是可以get到的,时间一过,就get不到了
set key value ex time
查看所有的key
keys *
redis是默认有16个数据库,范围是(0-15)
redis的切换
select 数据库名
列表
添加:
lpush key value从左往右
rpush key value 从右往左
查看:
lrange key 0 -1 这是查看全部(下标是从0开始排列)
移除列表的第一个元素并返回移除的元素:
lpop key
移除尾元素:
rpop key
指定返回几个元素:
lindex key 1
查看当前列表几个元素:
llen key
删除指定元素:
lrem key 要删除的个数 value
集合(添加重复值无效)
添加:
sadd key value
查看:
smembers key
移除:
srem key value
查看集合中元素个数:
scard key
查看两个集合的交集:
sinter 集合1 集合2
查看两个集合的并集:
sunion 集合1 集合2
查看两个集合的差集:这个是后头的集合差前头的
sdiff 集合1 集合2
hash 哈希操作(相当于python中字典套字典)
添加:
hset key file value
获取:
hget key file
查看所有的value:
hgetall key
获取所有的field:
hkeys key
查看所有的值:
hvals key
判断是否存在某个field:
hexists key field
查看长度:
hlen key
事物操作
隔离操作:事务中的所有命令都会序列化、按顺序地执行,不会被其他命令打扰。
原子操作:事务中的命令要么全部被执行,要么全部都不执行。
redis开启事务是multi
提交事务是exec
取消事务/回滚 discard
发布订阅功能
发布消息: publish 通道(名字随便写) 信息
打开另一个终端
订阅某个频道的消息: subscribe 通道(名字随便写)
持久化
redis有两种备份方式:rdb(默认开始这个方式)跟aof
如何关闭rdb的备份方式:
vim redis.conf
save 900 1 900秒有一个更改性操作就写入到rdb文件
save 300 10 300秒之内发生了10次更改性操作我就写入到rdb文件
save 60 10000 60秒以内触发了1万次更改性操作就写入到rdb文件
这三个条件一个被触发,就会启用rdb备份。
搜索save 把三个数字段注释掉即可。
同步机制:可以指定某个时间内发生多少个命令进行同步
存储内容:存储到硬盘 dump.db这个文件里,只存储值,不存储语法。存储的是redis具体的值
存放路径: 第一次启动,dump.rdb文件会根据你启动时的路径而生成。使用config get dir 可以获取此文件的路径。
优点:文件体积比aof小
因为存储的是redis具体的值,并且经过压缩,恢复速度快。
缺点:因为他的同步机制,一般设置成5分钟保存一次,但是在这种情况下,如果服务器故障,会造成5分钟的数据丢失。
如果内存数据较大,备份很耗时
aof备份的开启:
在配置文件redis.conf 查找 appendonly, 把no改成yes即打开。
存储位置:redis配置文件中dir是指定备份文件的存放路径,可以修改,修改后需加载生效。
同步机制:每秒同步或每次发生命令后同步
存储内容:备份是语法,存储的更新操作命令
优点:因为他是每秒或每更新操作触发备份,所以,当服务器故障,最多丢失1秒数据。
他不会备份整个库,你更新什么,我备份什么。
如果aof文件比较大,redis重写,只保留最小集合。(没有重复的命令)
缺点:没有压缩,体积大
因为每秒或每次操作触发备份,当并发量大时,备份慢
因为存储的是命令,恢复比不上rdb
python操作redis
首先打开redis配置文件,找到bind,把ip修改成本机ip
注意,先检查是不是安装了两个版本的redis
而后把redis.cnf中的bind修改成本机ip,而后加载配置文件
打开python
pip install redis
from redis import Redis
初始化redis实例变量:
xtredis = Redis(host=’ip’,port=6379,db=0-15中的一个)
此处ip需要去redis配置文件修改相应的bind ip
而后就可以进行相应的操作:
xtredis.set(‘username’,’lanhuiling’)