Redis
简介
- Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库
- 非关系型数据库的一种,经常用作缓存
- 官网:redis.io,中文网:redis.cn
- 丰富的数据类型:字符串、哈希、列表、集合、有序集合等
- 端口:6379
- 安装:
sudo apt-get install redis-server
连接测试
- 检查服务是否启动:
ps -ef | grep redis
- 连接:
redis-cli -h 主机 -p 端口 -a 密码
- -h:指定主机
- -p:指定端口
- -a:指定密码
- –help:查看帮助
- 示例:
redis-cli -h localhost -p 6379
- 测试:
- 127.0.0.1:6379>ping
- 127.0.0.1:6379>PONG
- 退出:quit
- 密码管理:默认没有密码,若设置了密码,没有密码也可以登录成功,但是什么都不能做
- 单次有效,通过以下命令
- 获取密码:config get requirepass
- 设置密码:config set requirepass 123456
- 密码认证:auth 123456
- 永久有效,修改配置文件
/etc/redis/redis.conf
- 将
requirepass xxxxx
行取消注释 - 后面跟上你需要的密码
- 重启服务后即可生效
- 将
- 单次有效,通过以下命令
redis命令
常用
1
2
3
4
5
6
7
8
9
10
11
12ping:测试连接情况,回复PONG表示OK
quit:退出连接
auth:密码认证
select:选择库,总共有16个,序号0~15,默认是第0个
info:查看服务器信息
command:查看支持的命令
flushdb:清空当前库
flushall:清空所有库
save:前台进行持久化存储
bgsave:后台进行持久化存储
exists:判断指定键是否存在
del:删除键字符串(string)
1
2
3
4
5
6
7
8
9
10set:设置
get:获取
getset:获取之后再设置
mset:设置多个
mget:获取多个
incr:加1
decr:减1
incrby:加指定的值
decrby:减指定的值
append:追加内容哈希(hash)
1
2
3
4
5
6
7
8
9
10hset:设置单个属性
hget:获取单个属性
hmset:设置多个属性
hmget:获取多个属性
hgetall:获取所有属性
hdel:删除键值对
hexists:判断指定键的指定字段是否存在
hkeys:获取指定键的所有属性名
hvals:获取指定键的所有属性值
hlen:获取指定键的属性个数列表(list)
1
2
3
4
5
6
7
8lpush:从左边(头部)插入数据
lpop:从左边(头部)删除数据
lrange:获取指定区间范围内的数据,0 -1表示所有
lindex:根据索引获取元素
llen:获取列表长度(元素个数)
rpush:从右边(尾部)插入数据
rpop:从右边(尾部)删除数据
lrem:移除指定个数的指定元素集合(set)
1
2
3
4
5
6
7
8
9
10
11sadd:添加元素
scard:统计元素个数
sdiff:求差集
sinter:求交集
smembers:获取指定集合的所有成员
sismember:判断是否在集合中
smove:移动元素
spop:随机的删除一个元素
srandmember:随机获取指定个数的元素
srem:移除元素
sunion:求并集有序集合(sorted set)
1
2
3
4
5
6
7
8zadd:添加元素
zcard:统计个数
zcount:指定分数区间内的元素数量
zrange:返回指定索引范围内的元素
zrangebyscore:返回指定分数区间的元素
zrank:返回指定成员的索引值
zrem:移除元素
zscore:获取指定元素的排序指标(分数)
使用工具远程连接redis
- 修改配置文件:/etc/redis/redis.conf,bind改为0.0.0.0
修改之后重启服务即可。
python操作redis
安装扩展库:
pip3 install redis
简介:
1
redis扩展库中有两个类,Redis和StrictRedis,StrictRedis实现了官方的命令,Redis是它的子类,兼容老版本。扩展库没有实现select方法,可以通过连接时指定使用的库。
操作:
简单连接
- 导入redis,创建Redis对象,所有命令行下的命令在代码中都是Redis对象的方法
1
2
3
4
5
6
7
8
9
10import redis
# 创建Redis对象进行连接
# 参数:decode_responses是否解码返回值
r = redis.Redis(host='localhost', port=6379, password='123456', decode_responses=True)
# 终端下的命令在代码中都是函数
r.set('name', 'xiaoming')
print(r.get('name'))
- 导入redis,创建Redis对象,所有命令行下的命令在代码中都是Redis对象的方法
连接池
- 多个redis对象使用同一个连接池进行连接,避免了多次连接、断开等操作的系统开销
1 | import redis |
- 使用管道(pipeline)
- 可以记录多个操作,然后一次将操作发送至数据库,避免了多次向服务器发送少量的数据
- 多个操作可以依次进行保存,然后发送,也可以进行连贯操作
1 | import redis |