首页 > 数据库 >redis基本操作JG

redis基本操作JG

时间:2024-11-30 14:10:44浏览次数:7  
标签:namelist set redis list value key 基本操作 JG

为什么学习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 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')  # 删除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 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))

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

标签:namelist,set,redis,list,value,key,基本操作,JG
From: https://www.cnblogs.com/westworldss/p/18578341

相关文章

  • redis 的三种结构原理解析
    目录主从复制Sentinel(哨兵)Cluster集群总结主从复制工作原理:1.slave启动后,向master发送SYNC命令,master接收到SYNC命令后通过bgsave保存快照(即上文所介绍的RDB持久化),并使用缓冲区记录保存快照这段时间内执行的写命令2.master将保存的快照文件发送给slave,并继续记录......
  • Redis和MySQL之间如何进行数据同步
    原因为什么要进行Redis和MySQL的数据同步?性能优化:MySQL是关系型数据库,数据读取和存储相对复杂;Redis是内存数据库,读写速度极快,将热点数据存在Redis,可以大大提高系统的访问速度。数据一致性需求:两者的数据需要保持一定程度的一致性。实现方式基于数据库的触发器原理:......
  • Redis设计与实现第16章 -- Sentinel 总结1(初始化、主从服务器获取信息、发送信息、接
    Sentinel是Redis的高可用解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器替代已下线的主服务器......
  • Redis设计与实现第15章 -- 复制 总结(旧版复制 新版复制 部分重同步 复制 心跳检测)
    在Redis中,用户可以通过执行SLAVEOF命令或设置slaveof选项,让一个服务器(从服务器)去复制另一个服务器(主服务器),进行复制中的主从服务器双方的数据库将保存相同的数据。15.1旧版复制功能的实现Redis在2.8版本以前使用的,分为同步和命令传播两个操作:同步用于从服务器的数据库状......
  • Redis
    Key(键)DEL格式:DELkey[key...]删除给定的一个或多个key。不存在的key会被忽略。可用版本:>=1.0.0时间复杂度:O(N),N为被删除的key的数量。删除单个字符串类型的key,时间复杂度为O(1)。删除单个列表、集合、有序集合或哈希表类型的key,时间复杂度为O(M)......
  • redis基本操作
    为什么学习redis,前几天有个需求,用到了redis库,之前学习过但仅限于大学的时候,这个时候差不多忘光了,需求测的时候也是现学的几个查询指令。印象最深的是开发设计的时候存储了10个不同key值但value(list字符串)相同的数据,当时问过为什么要存十个,解释为 “为了防止频繁的访问一个key导......
  • redis初级之HyperLogLog
    HyperLogLog1.描述​ HyperLogLog是一种概率数据结构,也被简称为HLL,用于估计集合的基数(总数)。和集合的用法基本一致,在使用时可以当做是在操作一个集合,但是HLL与集合的不同点在于HLL作为一种概率数据结构,以完美的精度换区了高效的空间利用率。这意味着HLL与集合在存储相同数据量的......
  • Linux安装Redis并配置开机自启
    我这边是CentOS7系统的,然后我准备安装Redis6.2首先是去官网下载Redis安装包,可以看到这里面有所有的安装包,不会下载的可以直接找我要(Redis官方下载地址)下载下来后我们把它传到服务器,我这边是放在了/usr/local目录下,然后我们给它解压tar-zxvfredis-6.2.13.tar.gz......
  • redis初级之Lua脚本
    Lua脚本1.简介与用法简介​ Lua语言是在1993年由巴西一个大学研究小组发明,其设计目标是作为嵌入式程序移植到其他应用程序,它是由C语言实现的,虽然简单小巧但是功能强大,所以许多应用都选用它作为脚本语言,尤其是在游戏领域,例如大名鼎鼎的暴雪公司将Lua语言引入到“魔兽世界”这款......
  • 多线程判断redis key导致Java hep space内存溢出
     线上经常发现报如下错误,后来发现rootcause是selectConfigitemforinstanceMap这个方法会查出几十万的结果集然后json压缩解压,写map等等操作,但是这个selectConfigitemforinstanceMap方法被很多地方调用到了,导致极有可能多线程同时都在查出几十万的结果集然后json压缩解压,写map等......