写点什么

redis 基本操作

  • 2025-03-18
    福建
  • 本文字数:2524 字

    阅读完需:约 8 分钟

为什么学习 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前插入2linsert 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 redisimport time
import redis
host = '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') # 删除keykey = r.keys() # 获取数据库所有的key,返回listprint(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获取valueprint(r.dbsize())r.quit() # 关闭连接
复制代码


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


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


import random
import redis
host = '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))
复制代码


文章转载自:余生没有余生

原文链接:https://www.cnblogs.com/lihongtaoya/p/18575991

体验地址:http://www.jnpfsoft.com/?from=001YH

用户头像

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
redis基本操作_数据库_不在线第一只蜗牛_InfoQ写作社区