1.概念
Redis(Remote Dictionary Server)是一个键值存储数据库,类似字典,它提供了持久化、高性能、键值对存储以及多种数据结构的支持。Redis通常被用作数据库、缓存、消息中间件等多种用途。
内存存储:Redis 将数据存储在内存中,因此具有非常高的读写性能。同时,Redis 也支持将内存数据持久化到磁盘中,以便在重启后恢复数据。
键值对存储:Redis 是一个键值对存储系统,每个键都与一个值相关联。这使得 Redis 可以很方便地存储和检索数据。
数据结构支持:除了基本的字符串类型,Redis 还支持列表、集合、有序集合、哈希表等多种数据结构。这些数据结构都可以通过 Redis 提供的命令进行操作和查询。
高性能:由于 Redis 将数据存储在内存中,并使用单线程模型,它具有非常高的读写性能。此外,Redis 还支持主从复制、分片等技术来提高性能和可扩展性。
支持事务:Redis 支持事务操作,可以一次执行多个命令,并保证这些命令的原子性。
发布订阅:Redis 提供了发布订阅机制,允许客户端订阅感兴趣的频道,并在有消息发布到频道时接收到通知。
多语言支持:Redis 支持多种编程语言的客户端库,包括 Python、Java、C#、Node.js 等。
2. Redis服务器与客户端
检测是否安装Redis: win+r,输出cmd,输入redis-cli检测客户端是否连接服务器,其中-h
主机ip -a 密码,启动服务器:redis-server 配置文件路径,查看所有键 :keys *
找到Redis目录下的redis.windows-service.conf文件,在requirepass foobared下方添加密码
2.1 常见配置项
dbfilename 数据文件,默认dump.rdb 持久化文件
requirepass 用户密码
masterauth 主机密码
logfile 日志文件
port 6379
databases 16
loglevel 日志等级
bind 绑定ip
保存时间
save time changecount
save 900 1 修改一个15分钟以后保存
save 60 10000 修改达到一万个 1分钟保存
2.2 获取配置信息
config get * 获取所有配置
config get requirepass
config set requirepass 123456
2.3 配置用户密码
requirepass 123456
redis -cli -h -a 或者登录以后使用auth
3.五种数据类型(Python操作)
安装redis模块 pip install redis
3.1 字符串
set(k,b) 设置单个
get(k) 获取单个
mset(k:v,k:v) 设置多个
mget(k,k,k) 获取多个
delete(k) 删除
incr 加1
incrby 加 增量
decr 减1
decrby 减 增量
setex(k,time,v) 设置有效期字符串
seten(k,v) 不存在插入,不会覆盖
append(k,v) 在原始数据后拼接
strlen(k) 键对应操作
keys() 返回所有键
exists(k) 键是否存在
type(k) 键都类型
exprie(k,time) 设置键的有效期
ttl(k) 查看剩余时间
存在:-1
不存在:-2
delete(k) 删除键
import redis
# 构建连接(若没有密码password可以不写)
client = redis.StrictRedis(password=123456)
# 1.数据类型 字符串
r = client.set("s2", "hi world")
r = client.get("s1")
r = client.mset({"s3": "s33", "s4": "s44","s5":"s55"})
r = client.mget(["s3", "s4","s5"])
r = client.incr("s6", 100)
r = client.incrby("s6", 10)
r = client.decr("s6")
r = client.decrby("s6", 10)
r = client.setex("s7", 10, "s77")
r = client.delete("s6")
r = client.append("s5", "888888")
r = client.expire("s6", 50)
r = client.exists("s6")
r = client.ttl("s6")
r = client.type("s6")
r = client.keys("s6")
r = client.strlen("s5")
print(r)
client.close()
3.2 哈希
存储键值对
常用操作
hset(name,key,value) 添加键值对
hget(name,key) 获取键对应的值
hmset(name,{}) 添加多个键值对
hmget(name,[key]) 获取列表字段的值
hincrby(name,key,value) 字段值 增加增量
hgetall(name) 所有字段与值
hkeys(name) 所有字段
hvals(name) 所有字段值
hexists(name,key) 字段存在否
hdel(name,key) 删除字段
hlen(name,key) 字段长度
import redis
client = redis.StrictRedis()
# 2.哈希 键(redis键) 字段(哈希中的键) 值(哈希中的值)
r = client.hset("h2", "k1", "v1")
r = client.hget("h2","k1")
r = client.hmset("h2", {"k2": "v2", "k3": "v3"})
r = client.hmget("h2", ["k1", "k2", "k3"])
r = client.hset("h2", "k4", "100")
r = client.hincrby("h2", "k4", 100)
r = client.hvals("h2")
r = client.hgetall("h2")
r = client.hkeys("h2")
r = client.hvals("h2")
r = client.hexists("h2", "k5")
r = client.hlen("h2")
r = client.delete("h2", "k4")
print(r)
client.close()
3.3 列表
存储多个数值
常见操作
lpush(key,v) 开头插入
rpush(key,v) 末尾插入
lpop(key) 开头删除
rpop(key) 末尾删除
lset(k,index,v) 修改指定位置指定元素
linsert(key,"after| before", pivot,value) 在指定位置插入指定元素
lrem(key, count, value) 删除指定个数的指定元素
ltrim(key,start, stop) 把原始内容切片
lrange(key,start, end) 返回对应位置范围所有元素
lindex(key,value) 返回对应位置的元素
import redis
client = redis.StrictRedis()
# 3.列表
r = client.lpush("l2", 1, 2, 3, 7)
r = client.rpush("l2", 0, -1, -3, -5, -7)
r = client.lpop("l2")
r = client.rpop("l2")
r = client.lset("l2", 0, "7")
r = client.linsert("l2", "before", "0", "0.5")
r = client.linsert("l2", "after", "0", "-0.5")
r = client.lrem("l2", 1, "-3")
r = client.ltrim("l2", 0, 10)
r = client.lrange("l2", 0, 10)
r = client.lindex("l2", 0)
print(r)
client.close()
3.4 集合
无序,不重复
常用操作
sadd(key,values) 将多个数据插入集合
srem(key,value) 移除指定value
spop(key) 随机移除
srandmember(key,count) 随机取count个不删除
scard(key) 集合中元素个数
smembers(key) 返回所有元素
sismember(key,value) value是否在集合中
sinter([key, key]) 交集
sinterstore(dest,[key, key]) 将返回交集存储到集合
sunion([key, key]) 并集
sunionstore(dest, [key, key]) 将返回并集存储到集合
sdiff([key, key]) 差集
sdiffstore(dest, [key, key]) 将返回差集存储到集合
import redis
client = redis.StrictRedis()
# 4.集合
r = client.sadd("set2", 100, 200, 300, 400, 500)
r = client.sadd("set3", 400, 500, 600, 700, 800)
r = client.srem("set2", "100")
r = client.spop("set2")
r = client.srandmember("set", 2)
r = client.scard("set2")
r = client.smembers("set2")
r = client.sismember("set2", "700")
r = client.sinter(["set2", "set3"])
r = client.sinterstore("set4", ["set2", "set3"])
r = client.sunion(["set2", "set3"])
r = client.sunionstore("set5", ["set2", "set3"])
r = client.sdiff(["set2", "set3"])
r = client.sdiffstore("set6", ["set2", "set3"])
r = client.smembers("set4")
print(r)
client.close()
3.5 有序集合
可自动按值排序,通过权重实现有序,每一个值抖音权重
常见操作:
zadd(name, {v:score}) 添加带有权重的元素
zrem(name,v,v) 从有序集合中移除
zcard(name) 个数
zcount(name, min ,max) 权重在min,max之间的元素个数
zrange(name, start,stop) 获取指定索引范围元素
zrangebyscore(name,min,max) 获取指定分支对应的元素
zrevrangebyscore(name,max,min) 逆序获取指定分支对应的元素
zscore(name,value) 获取value对应的权重
import redis
client = redis.StrictRedis()
# 5.有序集合
r = client.zadd("zset2", {"v1": 10, "v2": 20, "v3": 30, "v4": 40, "v5": 50})
r = client.zrem("zset2", "v1", "v2")
r = client.zcard("zset2")
r = client.zcount("zset2", 10, 100)
r = client.zrange("zset2", 0, 5, withscores=True)
r = client.zrevrange("zset2", 0, 2, withscores=True)
r = client.zrangebyscore("zset2", 0, 100, withscores=True)
r = client.zrevrangebyscore("zset3", 100, 0, withscores=True)
r = client.zscore("zset2", "v5")
print(r)
client.close()