redis:非关系型、内存数据库,用于做数据的缓存,由键值对构成,总共有16个数据库(0-15)
一、服务端及客户端命令
(1)服务端启动命令(就是启动.conf文件)
sudo redis-server /etc/redis/redis.conf
(2)客户端启动(就是要连接到那个redis服务端)
redis-cli -h 127.0.0.1 -p 6397
测试是否连接成功:
127.0.0.1:6379> ping
PONG
二、redis数据库的操作
(1)公共方法:
>>查看本数据库中有多少个键(只有这个可以用正则): keys *
>>选择数据库: select 10
>>删除: del 键1 键2
>>查看键的类型: type 键
(2)String
>>添加: set 键 值; mset 键1 值1 键2 值2
>>获取: get 键; mget 键1 键2
>>追加: append 键 值
>>删除: del 键1 键2
(3)hash(属性 值)>>>相当于键套键值对
>>添加一个属性和值: hset 键 属性 值
>>添加多个属性和值: hmset 键 属性1 值1 属性2 值2
>>查看单个属性的值: hget 键 属性1
>>查看多个属性的值: hmget 键 属性1 属性2
>>查看所有属性的值: hvals 键
>>查看键的所有属性: hkeys 键
>>删除n个属性: hdel 键 属性1 属性2
(3)list
>>从左边插入数据(显示相反,没有的键就创建,有就添加不会覆盖原有的): lpush 键 值1 值2 值3
>>从右边插入数据(显示相同,,没有的键就创建,有就添加不会覆盖原有的): rpush 键 值1 值2 值3
>>从指定位置插入数据: linsert lst before c 999(从左往右找第一个c)
>>查看队列中的值: lrange lst 开始下标 结束下标 (首尾都包含) 查看所有 lrange lst 0 -1
>>修改指定下标的值: lset set 0 hahaha
>>删除列表中的元素: lrem lst 2 b 从左往右开始数,删除两个b; lrem lst -2 b 从右往左数删除两个b; lrem lst 0 b 删除所有b
(4)set(不重复,不可修改,无序)
>>创建: sadd names zhangsan lisi wangwu
>>查看: smembers names
>>删除某个: srem names zhangsan
(5)zset(权重为序,越大越靠后)
>>添加: zadd names1 3 zhangsan 4 lisi 6 zhaoliu 5 wangwu
>>查看: zrange names1 0 -1;zrangebyscore name1 4 5
>>查看某个值的权重: zscore names1 zhangsan
>>删除指定元素: zrem names zhangsan
>>删除指定权重范围内的(含前后): zremrangebyscore names 4 5
三、Redis与Python交互(创建多个都是用字典做参数,查看所有键sr.keys("*"))
# 导入:
from redis import StrictRedis
if __name__ == "__main__":
try:
# 创建redis链接对象
sr = StrictRedis(host='127.0.0.1', port=6379, db=0, decode_responses=True)
except Exception as e:
print(e)
四、redis持久化
RDB快照
redis是默认做数据持久化的,默认的方式是快照(snapshotting),把内存的数据写入本地的二进制文件dump.rdb文件中。
快照持久化实现原理:
Redis借助了fork命令的copy on write机制。在生成快照时,将当前进程fork出一个子进程,然后在子进程中循环所有的数据,将数据写成为RDB文件,使用redis的save命令调用这个过程。
快照的配置有下面三个级别,配置是在redis的配置文件中。
RDB快照持久化的优点:
1. RDB是一个非常紧凑的文件,它保存了某个时间点得数据集,非常适用于数据集的备份,比如您可以在每个小时报保存一下过去24小时内的数据,同时每天保存过去30天的数据,这样即使出了问题您也可以根据需求恢复到不同版本的数据集.
2. RDB是一个紧凑的单一文件,很方便传送到另一个远端数据中心或者亚马逊的S3(可能加密),非常适用于灾难恢复.
3. RDB在保存RDB文件时父进程唯一需要做的就是fork出一个子进程,接下来的工作全部由子进程来做,父进程不需要再做其他IO操作,所以RDB持久化方式可以最大化redis的性能。4. 与AOF相比,在恢复大的数据集的时候,RDB方式会更快一些.
RDB快照持久化的缺点:
一旦数据库出现问题,那么我们的RDB文件中保存的数据并不是全新的,从上次RDB文件生成到Redis停机这段时间的数据全部丢掉了。