集约化网站群建设,wordpress换主题 无法打开,做外汇看什么网站,wordpress渗透经验提示#xff1a;文章写完后#xff0c;目录可以自动生成#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Redis是什么#xff1f;二、Redis安装三、Redis相关数据类型 四、基础操作#xff08;使用了python连接redis#xff09;1.字符串2.键对应操作3.哈希文章写完后目录可以自动生成如何生成可参考右边的帮助文档 文章目录 前言一、Redis是什么二、Redis安装三、Redis相关数据类型 四、基础操作使用了python连接redis1.字符串2.键对应操作3.哈希hash结构操作 4.集合5.有序集合6.列表 总结 前言
Redis是一个性能卓越、功能丰富的键值存储系统适用于各种不同的应用场景本文就介绍了Redis的基础内容。 提示以下是本篇文章正文内容下面案例可供参考
一、Redis是什么
Redis (Remote Dictionary Server) 是一个开源的高性能、非关系型数据库管理系统属于键值存储系统。它支持多种数据结构包括字符串、哈希表、列表、集合、有序集合等并提供了丰富的操作命令可以满足各种不同的应用需求。
Redis具有以下特点 内存存储Redis是将所有数据存储在内存中因此读写速度非常快。同时Redis也可以将数据持久化到硬盘上以保证数据的持久性。 高性能Redis采用C语言编写并且使用了自己开发的数据结构和算法使得它在处理大量并发请求时表现出色能够实现高性能的读写操作。 多种数据结构支持Redis支持多种数据结构包括字符串、哈希表、列表、集合、有序集合等。每种数据结构都有相应的操作命令方便开发者进行数据的存储和操作。 发布订阅功能Redis支持发布订阅模式可以将消息发布给多个订阅者实现消息的广播功能。 支持事务操作Redis支持事务操作可以将多个操作打包成一个事务进行执行并且保证事务的原子性。 分布式存储Redis支持数据的分布式存储可以将数据分散存储在多个节点上提高系统的整体性能和可扩展性。
总结起来Redis是一个性能卓越、功能丰富的键值存储系统适用于各种不同的应用场景例如缓存、排行榜、实时统计等。它简单易用具有高可用性、高性能和可扩展性成为开发者们常用的数据存储解决方案之一。
二、Redis安装
双击安装包一直next下去在下方页面可以更改安装地址和配置环境变量安装地址更不更改看个人喜好文件不大可以不改我这里更改到了E盘因为本宫喜欢千万不要忘了将添加环境变量的选项勾选上否则就要自己配置环境变量了。 下方页面中6379是端口号选项是在防火墙中添加一个通道供Redis使用。
扩展MySQL端口号3306MongoDB端口号27017Redis端口号6379 后面的默认就好。 安装后 winr 打卡命令行终端输入redis-cli出现下方界面表示安装成功。
三、Redis相关
Redis是一个键值存储数据库类似字典 内存数据库 MySQL、MongoDB都是以文件的形式存储在磁盘里 Redis数据在内存中操作内存的速度远远高于磁盘并且Redis数据最终也可以存储在磁盘上 Redis服务器与客户端 启动服务器redis-server 配置文件redis.windows.conf
数据类型 字符串 哈希存储键值对 列表存储多个数据 集合无序、不重复 有序集合按照分数权重进行排序 数据库相关 默认使用db0第一个数据库 keys *所有的键 四、基础操作使用了python连接redis 导入模块import redis 构建连接redis.StrictRedis() 关闭连接client.close()
提示下面的内容均是在python中运行的与在终端中运行是不一样的
1.字符串 set(k b)设置单个 get(k获取单个 mset({字符串1值 字符串2值 …})添加多个字符串 例子r client.mset({“s3”: “s33”, “s4”: “s44”, “s5”: “s55”}) # 在s3中添加s33在s4中添加s44在s5中添加s55 mget(kkkk)获取多个字符串中的元素 incr(字符串)加1例如在代码中s6从100变为101 incrby(字符串增量)在原有字符串上增加 decr减1 decrby减 增量 setex(ktimev)设置带有有效期的 setnx(kv)不存在就插入不会覆盖 append(kv)在原始数据后面拼接 delete(k)删除指定元素返回 1、0 1删除成功 0没有删除成功 strlen(k)获取指定键的值长度
# 导入模块
import redis# 构建连接
client redis.StrictRedis()# 操作# 数字类型 字符串
# 添加单个字符串
r client.set(s2, hello s2!!)
print(r) # True# 获取单个元素
r client.get(s2)
print(r, type(r)) # bhello s2!! class bytes# 添加多个字符串
# mset({字符串1值 字符串2值 ...})
r client.mset({s3: s33, s4: s44, s5: s55})
# 在s3中添加s33在s4中添加s44在s5中添加s55
print(r) # True# 获取多个字符串中的元素
r client.mget([s3, s4, s5])
print(r) # [bs33, bs44, bs55]r client.set(s6, 100)
print(r) # True# incr转换并加1
r client.incr(s6)
print(r) # 101
# 增指定的量
r client.incrby(s6, 10)
print(r) # 111# decr转换并-1
r client.decr(s6)
print(r) # 110
# decrby(字符串, 减量)
r client.decrby(s6, 10)
print(r) # 100# 设置带有有效期的
r client.setex(s7, 10, s777)
print(r) # True# 删除指定元素
r client.delete(s6)
print(r) # 1 》 删除成功# append(kv)在原始数据后面拼接返回当前字符串的长度
r client.append(s5, 77777)
print(r) # 8# 获取指定键的值长度strlen(k)
r client.strlen(s5)
print(r) # 8# 不存在就插入不会覆盖
r client.setnx(s44, s4)
print(r) # True# 释放连接
client.close()2.键对应操作 keys()返回所有键 exists(k)查看键是否存在 type(k)查看键对应值的类型 expire(ktime)设置有效期 ttl(k)查看剩余时间 delete(k)删除键
# 导入模块
import redis# 构建连接
client redis.StrictRedis()# 键相关操作
# 判断键是否存在返回0、1
# 存在1 不存在0
r client.exists(s33)
print(r) # 0# 设置有效期expire(ktime)以秒为单位
r client.expire(s3, 50)
print(r) # True# 查看剩余时间
r client.ttl(s3)
print(r) # 50# 查看键对应值的类型
r client.type(s3)
print(r) # bstring# 查看数据中所有的键
r client.keys()
print(r) # [bh2, bs44, bs4, bset1, bset5, ...# 查看键对应的类型
r client.type(s2)
print(r) # bstring# 释放连接
client.close()3.哈希hash
结构 键redis键 字段hash的键 值hash的值
操作 hset(namekeyvalue)添加键值对 hget(namekey)获取对应的键 hmget(name[key])获取列表中字段对应的值 hmset(name{})添加多个键值对 hincrby(namekeyvalue)字段的值增加增量返回增加后的值 hexists(namekey)判断字段是否存在 hgetall(name)所有字段与值 hkeys(name)所有字段 hvals(name)所有字段的值 hdel(namekey)删除字段1删除成功 hlen(namekey)返回字段长度
# 导入模块
import redis# 构建连接
client redis.StrictRedis()# 哈希
print(***** 哈希 *****)
# 键redis键
# 字段hash的键
# 值hash的值# 添加键值对hset(namekeyvalue)
# 添加成功返回1
r client.hset(h2, k11, v1111)
print(r) # 1# 获取对应的键hget(namekey
r client.hget(h2, k1)
print(r) # bv1
#
# hmset要被废弃了建议使用hset
# 添加键值对
r client.hmset(h2, {k2: v2, k3: v3})
print(r) # True# 获取列表中字段对应的值hmget(name[key])
r client.hmget(h2, [k2, k3, k1, k11])
print(r) # [bv2, bv3, None, bv1111]r client.hset(h2, k4, 100)
print(r) # 1# hincrby(namekeyvalue)将字段的值增加增量返回增加后的值
# 正量
r client.hincrby(h2, k4, 100)
print(r) # 200
r client.hget(h2, k4)
print(r) # b200
# 负量
r client.hincrby(h2, k4, -100)
print(r) # 100
r client.hget(h2, k4)
print(r) # b100# 判断字段是否存在
r client.hexists(h2, k4)
print(r) # True
# hdel(namekey)删除字段1删除成功
r client.hdel(h2, k4)
print(r) # 1
r client.hexists(h2, k4)
print(r) # False# 释放连接
client.close()4.集合 sadd(keyvaluevaluevalue)添加需要指定键返回成功插入的个数 例子r client.sadd(“set2”, 100, 200, 300, 300 ) smembers(key) 获取所有元素 sismember(keyvalue)判断value是否在集合中 scard(key)总个数 srem(keyvalue)移除指定元素返回移除的个数 spop(key)随机删除返回移除的元素 srandmember(key个数)随机获取集合中的元素 sinter( [ key1key2 ] )交集放入的是集合列表 sunion( [ key1key2 ] )并集放入的是集合列表 sdiff( [ key1key2 ] )差集放入的是集合列表 sinterstore(new_key, [ key1key2 ] )合并交集 (新集合)返回个数 sunionstore(new_key, [ key1key2 ] )合并并集 (新集合)返回个数 sdiffstore(new_key, [ key1key2 ] )合并差集 (新集合)返回个数
# 导入模块
import redis# 构建连接
client redis.StrictRedis()# 集合
print(********* 集合 *********)
# 添加需要指定键返回成功插入的个数
r client.sadd(set2, 100, 200, 300, 300, 100)
print(r) # 3# 获取所有元素
r client.smembers(set2)
print(r) # {b100, b300, b200}# 判断value是否在集合中
r client.sismember(set2, 100)
print(r) # 1# 总个数
r client.scard(set2)
print(r) # 3# 移除指定元素返回移除的个数
r client.srem(set2, 200)
print(r) # 1
r client.smembers(set2)
print(r) # {b100, b300}# 随机删除返回移除的元素
r client.sadd(set2, 450, 600, 780, 550, 450, 600)
print(r) # 4
r client.spop(set2)
print(r) # b450# 随机获取集合中的元素 2个
r client.srandmember(set2, 2)
print(r) # [b100, b550]# 第二个集合
r client.sadd(set3, 400, 500, 450, 300)
print(r) # 4
# 交集
r client.sinter([set2, set3])
print(r) # {b300}
# 并集
r client.sunion([set2, set3])
print(r) # {b500, b600, b100, b300, b450, b400, b550, b780}
# 差集
r client.sdiff([set2, set3])
print(r) # {b100, b550, b600, b780}# 合并交集返回个数
r client.sinterstore(set4, [set2, set3])
print(r) # 个数 # 1
r client.smembers(set4)
print(r) # {b300}# 合并并集返回个数
r client.sunionstore(set5, [set2, set3])
print(r) # 个数 # 8
r client.smembers(set5)
print(r) # {b500, b600, b100, b300, b450, b400, b550, b780}# 合并差集返回个数
r client.sdiffstore(set4, [set2, set3])
print(r) # 个数 # 4
r client.smembers(set4)
print(r) # {b100, b550, b600, b780}# 释放连接
client.close()5.有序集合 zadd(“集合”, {值: 权重})添加带有权重的元素返回个数 例子r client.zadd(“zset2”, {“v1”: 10, “v2”: 5 } ) zrem(集合, 值, 值, …)移除指定元素返回移除的个数 例子r client.zrem(“zset2”, “v1”, “v2”) 按照索引范围获取元素withscores判断输出是否需要带权重 正序 zrange(集合, min索引, max索引, withscoresTrue) 例子r client.zrange(zset2, 0, 5, withscoresTrue)结果[(bv4, 20.0), (bv3, 30.0), (bv6, 40.0), (bv5, 50.0)]逆序 zrevrange(集合, min索引, max索引, withscoresTrue) 例子r client.zrevrange(zset2, 0, 5, withscoresTrue)结果[(bv5, 50.0), (bv6, 40.0), (bv3, 30.0), (bv4, 20.0)]按照权重范围获取元素 正序zrangebyscore(集合, min权重, max权重, withscoresTrue) 逆序zrangebyscore(集合, max权重, min权重, withscoresTrue) zcard(集合) 总个数 zcount(集合, min, max)权重在min到max之间元素的个数 例子r client.zcount(“zset2”, 10, 100) zscore(集合, value)获取value对应的权重 zincrby(集合, 增量, 值)增加权重返回增加好的权重 例子r client.zincrby(“zset2”, 50, “v5”) # 向zset2中v5的权重增加50 结果50 zinterstore(新集合, [集合1, 集合2 …])合并交集返回个数
# 导入模块
import redis# 构建连接
client redis.StrictRedis()# 有序集合通过分数权重实现有序
# 添加带有权重的元素zadd(集合, {值: 权重})返回个数
r client.zadd(zset2, {v1: 10, v2: 5, v3: 30, v4: 20, v5: 50, v6: 40})
print(r) # 6# 移除指定元素返回移除的个数zrem(集合, 值, 值, ....)
r client.zrem(zset2, v1, v2)
print(r) # 2# 按照索引范围获取元素正序withscores判断输出是否需要带权重
# zrange(集合, min索引, max索引, withscoresTrue)
r client.zrange(zset2, 0, 5, withscoresTrue)
print(r) # [(bv4, 20.0), (bv3, 30.0), (bv6, 40.0), (bv5, 50.0)]
# 同上只不过是逆序按照索引获取元素
r client.zrevrange(zset2, 0, 5, withscoresTrue)
print(r) # [(bv5, 50.0), (bv6, 40.0), (bv3, 30.0), (bv4, 20.0)]# 按照权重范围获取元素(正序)zrangebyscore(集合, min权重, max权重, withscoresTrue)
r client.zrangebyscore(zset2, 0, 100, withscoresTrue)
print(r) # [(bv4, 20.0), (bv3, 30.0), (bv6, 40.0), (bv5, 50.0)]
# 逆序zrangebyscore(集合, max权重, min权重, withscoresTrue)
r client.zrevrangebyscore(zset2, 100, 0, withscoresTrue)
print(r) # [(bv5, 50.0), (bv6, 40.0), (bv3, 30.0), (bv4, 20.0)]# 总个数
r client.zcard(zset2)
print(r) # 4# 权重在min到max之间元素的个数zcount(集合, min, max)
r client.zcount(zset2, 10, 100)
print(r) # 4# 获取value对应的权重zscore(集合, value)
r client.zscore(zset2, v5)
print(r) # 50.0# 增加权重返回增加好的权重zincrby(集合, 增量, 值)
r client.zincrby(zset2, 50, v5) # 向zset2中v5的权重增加50
print(r) # 100.0r client.zadd(zset3, {v5: 500, v6: 400, v7: 300, v8: 40, v9: 50})
print(r)
# 交集zinterstore(新集合, [集合1, 集合2 ....])返回个数
r client.zinterstore(zset4, [zset2, zset3])
print(r) # 2# 释放连接
client.close()6.列表 插入返回当前列表的个数 在向当前列表的左边lpush(列表, 值值…) 例子r client.lpush(l2, 1, 2, 3, 4, 5)在向当前列表的右边插入rpush(列表, 值值…) 例子r client.rpush(l2, 0, -1, -2, -3)末尾删除返回删除的元素 左边删除lpop(列表) 右边删除rpop(列表) 修改lset(列表, 位置, 修改的值) 例子r client.lset(“l2”, 0, “30”) # 将l2中0的位置上的元素修改为30 插入元素返回当前列表的个数linsert(列表, “before/after”, 参考位置, 插入的值) r client.linsert(l2, before, 0, 0.5)# l2中在0的前面插入0.5r client.linsert(l2, after, 0, -0.5)# l2中在0的后面插入-0.5删除对应数量的值返回删除的个数 lrem(“l2”, 数量, 值) 例子r client.lrem(l2, 2, -30) # 在l2中删除2个-30保留列表指定范围内的元素删除其他元素ltrim(列表, start, end) r client.ltrim(“l2”, 2, 4) 获取指定范围的元素lrange(“l2”, start位置, end位置) r client.lrange(“l2”, 0, 100) 获取对应位置的元素lindex(列表, 位置)
# 导入模块
import redis# 构建连接
client redis.StrictRedis()# 列表
# 插入(在向当前列表的左边)返回当前列表的个数
# lpush(列表, 值值...)
r client.lpush(l2, 1, 2, 3, 4, 5)
print(r) # 5
# 在向当前列表的右边插入
# rpush(列表, 值值...)
r client.rpush(l2, 0, -1, -2, -3)
print(r) # 9# 末尾删除返回删除的元素
# 左边删除
# lpop(列表)
r client.lpop(l2)
print(r) # b5
# 右边删除
# rpop(列表)
r client.rpop(l2)
print(r) # b-3# 修改lset(列表, 位置, 修改的值)
r client.lset(l2, 0, 30) # 将l2中0的位置上的元素修改为30
print(r) # True# 插入元素返回当前列表的个数
# linsert(列表, before/after, 0参考位置, 插入的值)
# l2中在0的前面插入0.5
r client.linsert(l2, before, 0, 0.5)
print(r) # 8
# l2中在0的后面插入-0.5
r client.linsert(l2, after, 0, -0.5)
print(r) # 9# 删除对应数量的值返回删除的个数lrem(l2, 数量, 值)
r client.lrem(l2, 2, -30) # 在l2中删除2个-30
print(r) # 2# 保留列表指定范围内的元素删除其他元素ltrim(列表, start, end)
r client.ltrim(l2, 2, 4)
print(r) # True# 获取指定范围的元素lrange(l2, start位置, end位置)
r client.lrange(l2, 0, 100)
print(r) # [b3, b2, b1]# 获取对应位置的元素lindex(列表, 位置)
r client.lindex(l2, 5)
print(r) # None# 释放连接
client.close()总结
以上就是今天要讲的内容本文介绍了redis的基础使用而它具有快速的读写能力、灵活的数据模型和丰富的功能愿每个人的心灵都能如同一座富饶的花园种下智慧的种子在岁月的浇灌下开出收获的芬芳。