Redis数据库

Redis是一个高性能的Key-Value内存数据库,支持多种数据结构如String、List、Hashes、Sets和ZSET。它提供RDB和AOF两种持久化方式来保证数据安全。Redis常用于会话缓存、全页缓存、队列、排行榜和发布/订阅等场景。此外,文章还介绍了如何通过Python进行Redis操作。
摘要由CSDN通过智能技术生成

目录

redis概述

redis存储

redis操作

redis数据类型

string计数器

过期时间

Lists

Hashes

Sets

zset -- Sorted sets

与pythen的交互


 

redis概述

Redis 本质上是一个 Key - Value 类型的内存数据库,整个数据库统统加载在内
存当中进行操作,定期通过异步操作把数据库数据 flush 到硬盘上进行保存。因
为是纯内存操作, Redis 的性能非常出色,每秒可以处理超过 10 万次读写操
作,是已知性能最快的 Key - Value DB
Redis 的出色之处不仅仅是性能, Redis 最大的魅力是支持保存多种数据结构,
此外单个 value 的最大限制是 1GB ,因此 Redis 可以用来实现很多有用的功能,
比方说用他的 List 来做 FIFO 双向链表,实现一个轻量级的高性 能消息队列服
务等等。 Redis 的主要缺点是数据库容量受到物理内存的限制,不能用作海量
数据的高性能读写,因此 Redis 适合的场景主要局限在较小数据量的高性能操作
和运算上。
1 )、会话缓存( Session Cache
2 )、全页缓存( FPC
3 )、队列
4 )、排行榜 / 计数器
5 )、发布 / 订阅

redis存储

redis 里面的 rdb Redis DataBase )和 aof Append Only
File )文件 (内存数据库) 数据持久化
Redis 默认开启 RDB 持久化方式,在指定的时间间隔内,执行指定次数的写操
作,则将内存中的数据写入到磁盘中。
RDB 持久化适合大规模的数据恢复但它的数据一致性和完整性较差。
Redis 需要手动开启 AOF 持久化方式,默认是每秒将写操作日志追加到 AOF 文件
中。
AOF 的数据完整性比 RDB 高,但记录内容多了,会影响数据恢复的效率。

redis操作

16 个数据库 0 15
redis-cli
6379 默认监听端口
--raw 输出中文
进入 redis
redis-cli
select 0 -15 自由选择
HyperLogLogs
geospatial
Bit arrays
Streams

redis数据类型

string计数器

string 类型的 incr decr 命令的作用是将 key 中储存的数字值加一 / 减一,这
两个操作具有原子性,总能安全地进行加减操作,因此可以用 string 类型进行
计数,如微博的评论数、点赞数、分享数,抖音作品的收藏数,京东商品的销售
量、评价数等。
# string
set name qiye
get name
keys * 查看所有的 KEYapp
如何删除所有的数据
追加类容
append name1 jack2 # 会自动创建
get name
append name jack
get name "qiyejack"
del name 删除
设置多个 mset name1 jack1 name2 jack2
查看多个 mget name1 name2
自加: incr
自减: decr
加: incrby
减: decrby
type name1 # string
str_name1 ( 见名知意 )
exists name1 # 查看多少个 key
rename name1 name2 # 改名字

过期时间

expire name2 10
persist name2
ttl 返回 -1 代表没有过期时间
ttl 返回 -2 已经过期了
创建键的时候就设置过期时间
set name3 jack3 ex 5

Lists

list
# 创建一个键
rpush lname y1 y2 y3 y4 y5 y6 y7
type lname
# 查看
lrange lname 0 -1
左插入
lpush lname g5 g6
右插入
rpush lname g7 g8
索引查找: lindex lname 3
# 修改
lset lname 2 y10
# 删除
rpop lname # 删除最后面的
lpop lname # 删除最前面的
lrem mylist 0 "value"
ltrim mylist 1 -1

Hashes

添加数据: hset hname name1 jack1
keys *
hget hname name1
hset hnmae name2 jack2
hget hname name2
field 存在,正常读取 field 对应的值。
field 不存在,返回 nil
hmset
field 不存在,直接存储。
field 存在,执行覆盖操作
hmset name1 qiye1 1 qiye2 2 qiye3 3
hmget
hmget name1 qiye1 qiye2 qiye3
hdel 删除域
该命令可以同时删除多个字段,返回值是被删除字段的数量。
field 存在,删除字段,返回被删除字段的数量。
field 不存在, 返回 0
hgetall hname 域值对 # 读取全部
hvals hname # 获取指定 key 所有字段的值
hlen hname # 多少个域值对
# 增量( hincrby ) 实现加法
hset name10 age 23
hincrby name10 age 3 # 26

Sets

添加数据: sadd sname g1 g2 g3 g1
查看: smembers sname
spop sname # 随机
spop sname 2 # 数据删两个
srem sname member g1 # 指定删除 可指定多个
scard sname # 获取有多少个元素

zset -- Sorted sets

添加数据:
zadd zname 10 y2 20 y3 30 y4 40 y5
查看数据:
zrange zname 0 -1
zrangebyscore zname 0 100 分数
zrangebyscore zname 0 20
zscore zname y3 # 查看分数
zcard zname # 查找多少个元素
删除数据:
zrem zname y1
zremrangebyrank zname 0 2 # 索引删除
zremrangebyscore zname 0 20 # 分数删除

与pythen的交互

```python
import redis
redis-cli --raw  查看中文

# decode_responses = True  让redis返回的数据是str类型,如果不指定则结果为bytes. ‘中文’
red = redis.StrictRedis(host='127.0.0.1',decode_responses = True)
print(type(red.keys()))
print(red.keys())



string

# red.set('name','haha')
red.set('name','柒叶')  # 覆盖
ret = red.get('name')
print(ret)

print(red.keys())
red.rename('name','new_ex_name')  # 改键名
print(red.keys())
print(red.ttl('name'))



设置过期时间
red.set('name', 'qiye', ex=10)
print(red.get("name"))

list

# 使用lpush从头部插入元素
red.lpush("mylist",10,20,20)
print(red.lrange("mylist",0,-1))

#使用rpush从尾部插入元素
red.rpush("mylist",40,50)
print(red.lrange("mylist",0,-1))

# 使用llen获取列表元素的个数
print(red.llen('mylist'))

# 使用linsert在列表的某个值的前后插入一个值
red.linsert("mylist", "before", 40, "蓝桥")
print(red.lrange("mylist",0,-1))
# 第一个参数为name,第二个参数为before/after,第三个参数是在某个元素值的前或者后,第四个参数是需要插入的值

# 使用lrem删除list的指定值
red.lrem("mylist",1,10)   #第二个参数为个数
print(red.lrange("mylist",0,-1))

# 使用lpop移除列表最左侧的元素,并返回
print(red.lpop("mylist"))

# 使用lindex查询指定索引的的元素,并返回
print(red.lindex("mylist",1))


哈希
red.hset('hash_name','name','qiye')
print(red.hget('hash_name','name'))

在python已经被弃用了
# red.hmset('hash_name',{'name1':'baye','name2':'jiuye'}) 
# print(red.hmget('hash_name','name','name1','name2'))
# print(red.hgetall('hash_name'))

set
# 使用sadd进行添加元素到集合中
red.sadd("myset","a","b","c")
red.sadd("yourset","b","c","d")

# 使用smembers进行查询集合中的元素
print(red.smembers('myset'))

red.srem('set_name',3)  # 移除元素


# 使用scard进行计算集合中的元素个数
print(red.scard('myset'))

# 使用sdiff进行计算两个集合之间的差集
# myset-yourset
print(red.sdiff("myset","yourset"))

# 使用sinter进行计算两个集合之间的交集
print(red.sinter("myset","yourset"))

# 使用sismember检查当前元素是否存在集合之中
print(red.sismember("myset","a"))
print(red.sismember("yourset","a"))

# spop


zset
#使用zadd进行添加元素到有序集合中
red.zadd("zzset_name",{"a":1,"b":2,"c":3,"d":4})

# 使用zrange返回有序集合范围内的元素
print(red.zrange('zzset_name',0,-1))

# 使用zcard进行计算有序集合中的元素个数
print(red.zcard('zzset_name'))

# 使用zcount返回有序集合中min--max权重之间的个数
print(red.zcount('zzset_name',3,4))

# 使用zscore返回对应权重的元素
print(red.zscore('zzset_name','b'))

# 使用zrem删除有序集合的指定元素
red.zrem('zzset_name','a')
print(red.zrange('zzset_name',0,-1))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值