概述
- redis是什么?
Redis高性能,开源C语言开发的,以键值对存储数据的No Sql数据库
-
- No sql :非关系型数据
- 数据都是K-V形式
- 为啥需要学习redis?
爬虫:数据存储
-
- 文本:csv,excel,text,json
- 数据:MongoDB
- 分布式爬虫
Web:
-
- 缓存
- redis特点?
-
- 支持数据持久化,可以将内存的数据保存到硬盘
- string list set zset hash数据结构的存储
- 支持数据备份
- 速度快
- 应用场景
-
- 用来做缓存
- 大型系统中,实现特定功能:session共享 购物车
安装
下载地址:https://github.com/redis-windows/redis-windows/releases。
- 下载压缩包(尽量不要最新版)
- 解压指定盘符 例如 D:redis
- 配置环境变量path (可选)
- 启动服务 redis-server
- 链接客户端 redis-cli
数据操作
- redis是key-value数据结构 每条数据都是一个键值对
- 键的类型是字符串
- 注意:键不能重复
- 值的类型:
-
- 字符串string
- 哈希hash
- 列表list
- 集合set
- 有序集合zset
string
- 字符串类型的value 最多可以容纳的数据长度512M
保存
设置键值
set key value
例如:设置key为name,value为mark的数据
set name mark
设置键值过期时间
setex key seconds value
设置key为aa ,value为1的 过期时间10秒
setex aa 10 1
设置多个键值对
mset key value [key value ...]
mset a1 1 a2 2 a3 3
追加值
append key value
append a4 4
获取
- 获取:根据键获取值 如果不存在则返回nil
get key
- 获取:根据多个键获取多个值
mget key1 key2 ......
查询
- 查询键 参数支持正则表达式
keys pattern
- 查询所有键
keys *
- 判断键是否存在 如果存在返回1 不存在返回0
exists key
- 查看键对应值的类型
type key
- 查看有效时间 -1 没有时间限制 -2 没有这个key
ttl key
删除
- 删除键以及对应值 返回1成功 0删除不成功
del key
- 设置过期时间 已存在键值对
expire key seconds
其他命令
- incr key:将key存储数字+1 (整数)
- decr key:将key存储数字-1
- incrby key increment:在key存储的值在加给定量
- decrby key increment:在key存储的值在减给定量
- getrange key start end :将键对应值 进行截取
- setrange key oset value:在值oset位置覆盖数据
list
- 列表元素类型为string
- 按照插入顺序排序
增加
- 在左侧插入数据
lpush key value
- 在右侧插入数据
rpush key value
- 在指定元素的前或者后插入新的数据
linsert key BEFORE|AFTER pivot value
linsert a4 after 2 99 在2的后面插入99
PS:
(error) MISCONF Redis is congured to save RDB snapshots, but it is
currently not able to persist on disk. Commands that may modify the
data set are disabled, because this instance is congured to report
errors during writes if RDB snapshotting fails (stop-writes-on-bgsaveerror option). Please check the Redis logs for details about the RDB
error.
但它不能持久化到硬盘 用来修改数据的命令是不能用的
解决方法:
- 运行config set stop-writes-on-bgsave-error no
- 在redis.windows.conf文件 231 行 stop-writes-on-bgsave-error 由
yes 改为no
获取
- 返回列表里指定范围内元素
lrange key start stop
修改
- 修改指定index对应的值
lset key index value
删除
- 删除指定元素
lrem key count value
-
- count = 0 :移除所有
- count > 0: 从头到尾删除
- count < 0: 从尾到头删除
hash
- hash用于存储对象 对象结构为属性,值
- 值的类型为string
增加,修改
- 设置单个属性
hset key field value
hset user name mark
- 设置多个属性
hmset key field value [field value ...]
获取
- 获取指定键所有属性
hkeys key
hkeys user
- 获取一个属性的值
hget key field
hget user name
- 获取多个属性的值
hmget key field [field ...]
hmget user1 name age
- 获取所有属性的值
hvals key
hvals user1
删除
- 删除整个hash键和值 使用del
- 删除属性 属性对应值会被一起删除
hdel key field [field ...]
hdel user1 class
set
- 无序集合
- 元素类型string类型
- 元素不重复
增加
- 添加元素
sadd key member [member ...]
sadd u1 zhangsan lisi wangwu zhangsan
获取
- 返回所有元素
smembers key
smembers u1
删除
- 删除del
- 删除指定元素
srem key member [member ...]
srem u1 wangwu
- 随机弹出出栈
spop key [count]
spop u2 2
查询
- 判断集合元素是否存在 1表示存在 0表示不存在
sismember key member
sismember u2 1
移动
smove source destination member
smove u2 u1 1 # 把u2里1移动到u1里
zset
- 有序集合
- 元素为string类型
- 元素不重复
- 每个元素都会关联一个double类型的score ,表示权重 通过权重将元素从
小到大排序
增加
- 添加
zadd key [NX|XX][CH] [INCR] score member [score member
向u3对应的集合里添加元素 权重
zadd u3 4 lisi 5 wangwu 6 zhouliu 3 zhangsan
获取
- 返回指定范围内的元素
zrange key start stop [WITHSCORES]
zrange u3 0 -1
- 返回score 值在min-max之间的成员
zrangebyscore key min max
zrangebyscore u3 3 5
- 返回某个成员的权重值
zscore key member
zscore u3 wangwu
删除
- 删除指定元素
zrem key member [member ...]
zrem u3 zhangsan
- 删除权重在指定范围内的元素
zremrangebyscore key min max
zremrangebyscore u3 3 5
Python和redis交互
默认redis有16数据库
切换数据库
安装
pip install redis
代码
import redis
# 创建对象 与redis服务建立链接
sr = redis.StrictRedis()
# sr.set('u4','mark')
# sr.lpush('u5','1','2','3')
class StringRedis:
def __init__(self):
self.conn = redis.StrictRedis(host='127.0.0.1',port=6379,db=0,decode_responses=True)
def string_set(self,k,v):
# 写
res = self.conn.set(k,v)
print(res)
def string_get(self,k):
# 读
res = self.conn.get(k)
print(res)
s = StringRedis()
# s.string_set('u6','马克')
s.string_get('u6')