1. 基本概念
Redis 是一个高性能的key-value数据库。
NoSQL:一类新出现的数据库(not only sql);泛指非关系型的数据库,不支持SQL语法
配置
Redis的配置信息在/etc/redis/redis.conf下。
查看
sudo vi /etc/redis/redis.conf
核心配置选项
绑定ip:如果需要远程访问,可将此⾏注释,或绑定⼀个真实ip
bind 127.0.0.1
端⼝,默认为6379
port 6379
数据⽂件 : dbfilename dump.rdb
数据⽂件存储路径 : dir /var/lib/redis
⽇志⽂件 : logfile "/var/log/redis/redis-server.log"
数据库,默认有16个 : database 16
2. 连接启动方式
1.启动redis服务器命令: redis-server 配置文件名称 (可以不填,读取默认配置)
2.连接redis客户端命令: redis-cli -h ip地址 -p 端口 -c:连接集群
如:redis-cli -h 47.101.63.222 -p 56379
3. 连接本地:redis-cli
4. 设置密码:config set requirepass pass_123456
5. 获取密码:config get requirepass
6. 登录:auth pass_123456
7. 切换数据库:
数据库没有名称,默认有16个,通过0-15来标识,连接redis默认选择第一个数据库
select 10
阿里云服务器上安装redis: 如何在阿里云服务器上安装Redis?_java_zdc的博客-CSDN博客
3. 基本的数据格式和操作
string类型:
# 保存:
设置值:set key value
(设置键为name值为itcast的数据)
set name itcast
设置值,过期时长:setex key seconds value
(设置键为aa值为aa过期时间为3秒的数据)
setex aa 3 aa
设置多个键值: mset key1 value1 key2 value2 ...
(设置键为'a1'值为'python'、键为'a2'值为'java'、键为'a3'值为'c')
mset a1 python a2 java a3 c
追加值:append key value
(向键为a1中追加值' haha')
append 'a1' 'haha'
# 获取:
根据键获取值,如果不存在此键则返回nil -- get key
(获取键'name'的值)
get 'name'
根据多个键获取多个值: mget key1 key2 ...
(获取键a1、a2、a3'的值)
mget a1 a2 a3
键命令
查找键,参数⽀持正则表达式;-- keys pattern
1. 查看所有键 keys *
2. 查看名称中包含 a 的键 keys 'a*'
3. 判断键是否存在,如果存在返回1,不存在返回0 exists key1
4. 查看键对应的value的类型 type key
5. 删除键及对应的值 del key1 key2 ...
(删除键a2、a3) -- del a2 a3
6. 设置过期时间,以秒为单位,如果没有指定过期时间则⼀直存在,直到使⽤DEL移除
expire key seconds
(设置键'a1'的过期时间为3秒) -- expire 'a1' 3
7. 查看有效时间,以秒为单位 ttl key
(查看键'bb'的有效时间) -- ttl 'bb'
hash类型
⽤于存储对象,对象的结构为属性、值; 值的类型为string
1. 设置单个属性 hset key field value
(设置键 user的属性name为itheima) -- hset user name itheima
2. 设置多个属性 hmset key field1 value1 field2 value2 ...
(设置键u2的属性name为itcast、属性age为11)
hmset u2 name itcast age 11
3. 获取指定键所有的属性 hkeys key
4. 获取⼀个属性的值 hget key field
(获取键u2属性'name'的值)
hget u2 'name'
5. 获取多个属性的值 hmget key field1 field2 ...
6. 获取所有属性的值 hvals key
7. 删除属性的值: hdel key field
(删除键'u2'的属性'age')
hdel u2 age
list类型:
列表的元素类型为string
1. 在左侧插⼊数据 lpush key value1 value2 ...
2. 在右侧插⼊数据 rpush key value1 value2 ..
3. 在指定元素的前或后插⼊新元素
linsert key before或after 现有元素 新元素
3. 查看:
rpop 右边取出元素(取出后list元素个数减1)
rpop key (与 lpush 连用;形成队列操作)
lpop: 左侧取出一个元素,取出后list元素个数减1
4. 获取: 返回列表⾥指定范围内的元素
lrange key start stop
start、stop为元素的下标索引
索引从左侧开始,第⼀个元素为0
索引可以是负数,表示从尾部开始计数,如-1表示最后⼀个元素
(获取键为'a1'的列表所有元素)
lrange a1 0 -1
5. 设置指定索引位置的元素值
lset key index value
索引从左侧开始,第⼀个元素为0
索引可以是负数,表示尾部开始计数,如-1表示最后⼀个元素
(修改键为'a1'的列表中下标为1的元素值为'z')
lset a1 1 z
6. 删除
1) 删除指定元素 lrem key count value
将列表中前count次出现的值为value的元素移除
count > 0: 从头往尾移除
count < 0: 从尾往头移除
count = 0: 移除所有
set类型:
属性: ⽆序集合
元素为string类型
元素具有唯⼀性,不重复
说明:对于集合没有修改操作
1. 增加
添加元素: sadd key member1 member2
2. 获取
返回所有的元素: smembers key
3. 删除
删除指定元素: srem key
(删除键'a3'的集合中元素'wangwu')
srem a3 wangwu
zset类型(有序集合):
属性:sorted set,有序集合
元素为string类型
元素具有唯⼀性,不重复
每个元素都会关联⼀个double类型的score,表示权重,通过权重将元素从⼩到⼤排序
说明:没有修改操作
1. 增加
添加元素: zadd key score1 member1 score2 member2
(向键'a4'的集合中添加元素'lisi'、'wangwu'、'zhaoliu'、'zhangsan',权重分别为4、5、6、3)
zadd a4 4 lisi 5 wangwu 6 zhaoliu 3 zhangsan
2. 获取
返回所有的元素: zrange key start stop
start、stop为元素的下标索引
索引从左侧开始,第⼀个元素为0
索引可以是负数,表示从尾部开始计数,如-1表示最后⼀个元素
3. 删除
删除指定元素: zrem key member1 member2 ...
删除权重在指定范围的元素: zremrangebyscore key min max
(删除集合'a4'中权限在5、6之间的元素)
zremrangebyscore a4 5 6
4. 安装方式:
1. 联⽹安装包redis: pip install redis
2. 到中⽂官⽹-客户端下载redis包的源码,使⽤源码安装
一步步执行 wget https://github.com/andymccurdy/redis-py/archive/master.zip
unzip master.zip
cd redis-py-master
sudo python setup.py install
5. 与python 交互
1. 引入模块
from redis import *
(这个模块中提供了StrictRedis对象(Strict严格),⽤于连接redis服务器,并按照不同类型提供 了不同⽅法,进⾏交互操作)
2. 连接 redis
(通过init创建对象,指定参数host、port与指定的服务器和端⼝连接,host默认为localhost,port默认 为6379,db默认为0)
sr = StrictRedis(host='localhost', port=6379, db=0)
简写
sr=StrictRedis()
string-增加
⽅法set,添加键、值,如果添加成功则返回True,如果添加失败则返回False
from redis import *
if __name__=="__main__":
try:
#创建StrictRedis对象,与redis服务器建⽴连接
sr=StrictRedis()
#添加键name,值为itheima
result=sr.set('name','itheima')
#输出响应结果,如果添加成功则返回True,否则返回False
print(result)
except Exception as e:
print(e)
----------------------------------------------------------------------
string-获取
⽅法get,添加键对应的值,如果键存在则返回对应的值,如果键不存在则返回None
from redis import *
if __name__=="__main__":
try:
#创建StrictRedis对象,与redis服务器建⽴连接
sr=StrictRedis()
#获取键name的值
result = sr.get('name')
#输出键的值,如果键不存在则返回None
print(result)
except Exception as e:
print(e)
string-修改
⽅法set,如果键已经存在则进⾏修改,如果键不存在则进⾏添加
编写代码如下
from redis import *
if __name__=="__main__":
try:
#创建StrictRedis对象,与redis服务器建⽴连接
sr=StrictRedis()
#设置键name的值,如果键已经存在则进⾏修改,如果键不存在则进⾏添加
result = sr.set('name','itcast')
#输出响应结果,如果操作成功则返回True,否则返回False
print(result)
except Exception as e:
print(e)
string-删除
⽅法delete,删除键及对应的值,如果删除成功则返回受影响的键数,否则则返 回0
编写代码如下
from redis import *
if __name__=="__main__":
try:
#创建StrictRedis对象,与redis服务器建⽴连接
sr=StrictRedis()
#设置键name的值,如果键已经存在则进⾏修改,如果键不存在则进⾏添加
result = sr.delete('name')
#输出响应结果,如果删除成功则返回受影响的键数,否则则返回0
print(result)
except Exception as e:
print(e)
获取键
⽅法keys,根据正则表达式获取键
编写代码如下
from redis import *
if __name__=="__main__":
try:
#创建StrictRedis对象,与redis服务器建⽴连接
sr=StrictRedis()
#获取所有的键
result=sr.keys()
#输出响应结果,所有的键构成⼀个列表,如果没有键则返回空列表
print(result)
except Exception as e:
print(e)