redis基本操作JG

news/2025/2/14 2:12:00/文章来源:https://www.cnblogs.com/westworldss/p/18578341

为什么学习redis,前几天有个需求,用到了redis库,之前学习过但仅限于大学的时候,这个时候差不多忘光了,需求测的时候也是现学的几个查询指令。印象最深的是开发设计的时候存储了10个不同key值但value(list字符串)相同的数据,当时问过为什么要存十个,解释为  “为了防止频繁的访问一个key导致的热key问题,所以存储10个相同value的key,随机访问,分散压力”。后面查询资料才发现,频繁访问一个会导致CPU资源过载,内存资源紧张,负载不均衡等问题。

一.环境搭建

我是直接在网上下载的win redis-x64.zip压缩包,解压到本地后可以看到两个文件,一个是redis-server.exe redis服务启动程序,另一个是redis-cli.exe redis客户端操作程序。压缩包地址:https://pan.baidu.com/s/1t_NpWnE_qj4TvyESyvXYDA?pwd=4c0a    提取码:4c0a

二.基本使用

1.启动服务

redis-server.exe redis.windows.conf  # 在解压目录下打开cmd,运行此命令

2.打开redis客户端连接

redis-cli.exe  # 在解压目录下另外打开cmd,运行此命令,服务不要关闭

输入ping返回PONG即连接成功

ip默认本地ip,端口默认6379

3.切换库

select index  # redis共有16个库,index为0-15,默认为0号库

4.设置key和value值

set key value   # 设置key值和对应的value值
get key  # 通过key获取value值

5.停止服务

shutdown

6.其它常用操作

dbsize:查看当前库key值数量

flushdb:删除当前库所有数据

exit:退出客户端连接

keys *:查看当前库所有key值(还可模糊匹配:*通配符,?占位符,例:*明*,*ming,li*)

exists key:判断key是否存在(例:exists name   存在返回1,不存在返回0)

expire key seconds:设置key过期时间(例如:expire name 30,设置name存活30s,30秒后key会失效删除)

ttl key:查询key剩余存活时间(-1 表示未设置存活时间,永久生效,-2已失效,存活时间已过,正数表示剩余存活时间)

type key:查询vaule数据类型

del key:删除key

append key value:在当前value末尾追加内容

strlen key:返回value长度

三.存储类型

1.string

字符串是Redis中最基本的数据类型,可以存储任何形式的字符串,包括数字、文本等

存储时使用:set key value(通过set存储的value都是string类型)

2.哈希(Hash)

哈希类型是一个键值对的集合,适用于存储对象类型的数据。每个哈希表可以包含多个字段和值,非常适合表示具有多个属性的数据对象

1)HSET key field value:设置哈希表字段的值。

2)HGET key field:获取哈希表字段的值。

3)HDEL key field:删除哈希表的某个字段

3.列表(list)

列表是一个双向链表,支持在列表的两端进行高效的插入和删除操作

1)声明一个key,value值为list的

lpush namelist 'liming'  # 当key不存在时,创建一个key并赋予value值

2)添加多个vallue

lpush namelist '2' '3'  # 默认在最左侧添加,即(['3','2','liming'])

3)根据下标查询value list值

lrange namelist 0 100  # 查询namelist  key对于的value list中0-100的下标值

4)向list右侧添加value值

rpush namelist 4 5  # 即['3','2','liming',4,5]

5)向右侧添加单个元素值

 rpushx namelist 6  # 即[.......4,5,6],若key不存在则添加失败

6)向左添加单个元素值

lpushx namelist 0  # 若key不存在则添加失败

7)通过下标获取对应的元素值

lindex namelist 2

8)删除最左侧的值

lpop namelist

9)删除最右侧的值

rpop namelist

10)删除

lrem namelist 0 4  # 删除list中值为4的全部元素
lrem namelist 2 4  # 删除list中第二个元素值为4的元素

11)查询list长度

llen key

12)插入元素

linsert key before 3 2  # 在3前插入2
linsert key after 3 2  #在3后插入2

4.集合(set)

集合是一种无序、不重复的数据类型。Redis提供了高效的集合操作,如求交集、并集、差集等

1)创建一个set类型的value值

sadd set 4 5 6  # 赋予set的元素值有三个,4,5,6

2)查看全部的value值

smembers set

3)判断value值是否存在

sismember key value

4)判断元素个数

scard key

5)删除元素

 srem set 1,2,3 4 5  # 删除1,2,3  4  5三个元素值

5.有序集合(zset)

有序集合与普通集合类似,但每个元素都有一个关联的分数(score),Redis会根据分数对元素进行自动排序

1)ZADD key score member:向有序集合中添加元素并指定分数

zadd age 1 2 2 3  # 添加两个元素2,3

2)ZRANGE key start stop:获取指定范围内的有序集合成员

zrange age 0 100

3)ZREM key member:删除有序集合中的某个元素

zrem age 4

四.python操作

1.安装redis库

pip install redis

2.实例操作

# pip install redis
import timeimport redishost = '127.0.0.1'  # redis服务地址
port = 6379  # redis服务端口r = redis.StrictRedis(host=host, port=port, db=0, decode_responses=True)  # decode_responses=True设置true返回list类型,不设置返回字节
r.delete('age')  # 删除key
key = r.keys()  # 获取数据库所有的key,返回list
print(key)
r.set('python', 'python', ex=10)  # set(key,value,过期时间(ex设置的是秒,px设置毫秒))
time.sleep(3)
print(r.ttl('python'))  # 查询key剩余存活时间
r.set('python', 'pythoned', nx=True)
'''
nx=True当key值python不存在时,添加数据,存在则添加失败
xx=True 当key值python存在时,修改value值
'''print(r.get('python'))  # 通过key获取value
print(r.dbsize())
r.quit()  # 关闭连接

操作方法和dos差不多,r为redis实例化对象,直接用r.的方式调用方法操作即可。

3.python实现随机访问key来避免频繁的访问一个key导致的热key问题

import randomimport redishost = '127.0.0.1'  # redis服务地址
port = 6379  # redis服务端口r = redis.StrictRedis(host=host, port=port, db=1, decode_responses=True)  # decode_responses=True设置true返回list类型,不设置返回字节
key_list = ['key0', 'key1', 'key2', 'key3', 'key4', 'key5', 'key6', 'key7', 'key8', 'key9']
for key in key_list:r.set(key, 1)
keys = r.keys()
a = random.choice(keys)
print(r.get(a))

本博客参考slower加速器。转载请注明出处!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/844129.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索 TypeScript 编程的利器:ts-morph 入门与实践H6

我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。本文作者:贝儿背景 在开发 web IDE 中生成代码大纲的功能时, 发现自己对 TypeScript 的了解知之甚少,以至于针对该功能的实现没有明确的思…

IDEA本地运行Spark程序报错:HADOOP_HOME and hadoop.home.dir are unset. 解决方法

报错信息 java.lang.RuntimeException: java.io.FileNotFoundException: java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset. -see https://wiki.apache.org/hadoop/WindowsProblemsat org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:737)…

纯js轻量级图片放大显示插件

在线演示 下载 lightense-images是一款可以将缩略图片在屏幕中间放大显示的纯JS插件。该图片放大插件的效果类似于Medium.com上的图片放大预览效果。它的特点有:轻量级,压缩后的版本仅2KB。 点击缩略图后,以lightbox的方式来显示放大图片。 可以自定义背景遮罩层的颜色和透…

Air780E低功耗模组的LuatOS开发:位运算(bit)示例教程!

本文讲述的是低功耗4G模组Air780E的LuatOS开发,关于位运算(bit)的示例教程,希望大家有所收获。本文讲述的是低功耗4G模组Air780E的LuatOS开发,关于位运算(bit)的示例教程,希望大家有所收获。 一、位运算概述 位运算是一种在计算机系统中对二进制数位进行操作的运算。由于…

【安全运营】当监管要一份网络安全总结报告

经常遇到上级要一份网络安全总结报告的情形,以下举例的格式是比较常见的一种,供大家参考。 网络安全检查总结报告例子 一、报告名称 XXX限公司2024年网络安全检查总结报告。 二、检查总结报告组成 (一)网络安全检查工作组织开展情况(根据公司的管理文件) 我司高度重视网络…

USB无法识别设备?USB驱动问题解析篇

今天我们来讲解的是USB驱动问题,连接USB无法识别模组设备,是不是驱动问题?今天就一起来聊聊如何排查解决。今天我们来讲解的是USB驱动问题,连接USB无法识别模组设备,是不是驱动问题?今天就一起来聊聊如何排查解决。 注意:本文涉及的内容都是基于Windows系统,且不低于Wi…

fallingsnow.js-jquery下雪动画特效

fallingsnow.js是一款小巧的jquery下雪动画特效插件。该jquery下雪动画特效兼容ie8浏览器,它会控制雪花的飘落速度,雪花的尺寸越小,下落的速度越慢,可以制作出雪花飞舞的视觉差效果。在线演示 下载使用方法 在页面中引入jquery.fallingsnow.css和jquery、jquery.fallingsn…

asp.net mvc视图传递数据至另一页的视图

由于简篇,C# mvc +axios + web api + javascript 这里只是简单一笔带过。如果操作,看如下截图 可以写一个javascript函数, 具体如何传,代码如何写?参考博文前链接内的DetailButton_EventListener(data)函数的写法。 把数据传至MVC 的控制器中,让控制器来处理。 在此数据处…

AI让照片跳舞,人人都能是舞王!Swan下载介绍

最近,兵马俑、马斯克以及各地网友跳科目三和网红舞的视频陆续在社交媒体和朋友圈刷屏,这些大约10秒左右的视频都不是真人出镜,均由大模型生成,这种低门槛的跳舞方式引发了网友的广泛体验,掀起了一波斗舞狂潮「AI治愈了我的四肢不协调」Swan是一款使用扩散模型实现的时域一…

D触发器

一、D触发器原理D触发器(data flip-flop)也称为维持-阻塞边沿D触发器,由六个与非门组成,其电路图及其逻辑符号如下图所示。其中G1和G2构成基本的RS触发器,G3和G4构成时钟控制电路,G5和G6组成数据输入电路。 二、D触发器原理- -钟控D触发器在分析维持-阻塞边沿D触发器的工作…

idea 2024.2切换到旧版的UI

安装官方的 Classic UI 插件。 步骤:File -> Settings -> Plugins ,搜索 Classic UI 安装即可。