首页 > 数据库 >redis模块

redis模块

时间:2023-10-17 19:56:46浏览次数:41  
标签:127.0 name myzset 0.1 redis value 6379 模块

一、首先了解下redis的基本使用命令:
Redis支持5种数据类型:string、hash、list、set、sorted sert(有序集合):
1、string是redis最基本的类型,一个key对应一个value。string类型是二进制安全的,也就说它可以包含任何数据,如图片、序列化的对象等。
基本操作命令:
127.0.0.1:6379> set name Donfag
OK
127.0.0.1:6379> get name
"Donfag"
127.0.0.1:6379> del name
(integer) 1

2、hash相当于python中的字典,所以非常适合存储值对角的信息,reids中每个hash可以存储2的32次方减1个键值对(40多亿)。主要使用hget、hmset命令:
127.0.0.1:6379> hmset person name "Donfag" age 20 city "ShangHai"
OK
127.0.0.1:6379> hget person name
"Donfag"
127.0.0.1:6379> hget person age
"20"
127.0.0.1:6379> hget person city
"ShangHai"
127.0.0.1:6379> hget person job
(nil)
hmset命令相当于python中给person这个字典赋值:person={"name":"Donfag","age":20,"city":"ShangHai"}。hget时由于没有job这个key所以返回了空值nil。
也可以用hmget批量获取一个hash中的所有值:
127.0.0.1:6379> hmget person name age city job
1) "Donfag"
2) "20"
3) "ShangHai"
4) (nil)
127.0.0.1:6379> del user
(integer) 1

3、list是按照插入顺序排列的字符串列表,可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键不存在,则为该键创建一个新的列表;如果列表中所有的元素都被移除,那么该键也将会被从数据库中删除。list中可以包含最大元素数量是4294967295个。主要命令:lpush、lrange、rpush:
127.0.0.1:6379> lpush mylist a
(integer) 1
127.0.0.1:6379> lpush mylist b
(integer) 2
127.0.0.1:6379> lpush mylist c d e
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"

127.0.0.1:6379> rpush mylist A
(integer) 6
127.0.0.1:6379> lrange mylist 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"
6) "A"
可以用lrem删除指定的元素,用ltrim删除指定范围的元素:
127.0.0.1:6379> lrem mylist 1 A
(integer) 1
127.0.0.1:6379> lrange mylist 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"

127.0.0.1:6379> lrange mylist 0 -1
1) "j"
2) "i"
3) "h"
4) "g"
5) "f"
6) "e"
7) "d"
8) "c"
9) "b"
10) "a"
127.0.0.1:6379> ltrim mylist 1 3
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "i"
2) "h"
3) "g"

4、set 是string类型的无序集合,集合的成员是唯一的,也就是说没有重复的元素,每个集合可以存储40多亿个成员。主要命令:sadd、smembers、srem:
127.0.0.1:6379> sadd myset a
(integer) 1
127.0.0.1:6379> sadd myset a
(integer) 0
127.0.0.1:6379> sadd myset b c d
(integer) 3
127.0.0.1:6379> smembers myset
1) "b"
2) "a"
3) "d"
4) "c"
127.0.0.1:6379> srem myset a
(integer) 1
127.0.0.1:6379> smembers myset
1) "b"
2) "d"
3) "c"

5、sorted set 是set的一个升级版本,它在set的基础上增加了一个顺序属性,这一属性在添加修改元素时可以指定,每次指定后zset会自动按照新的值自动调整顺序。主要命令:zadd、zrange:
127.0.0.1:6379> zadd myzset 1 a
(integer) 1
127.0.0.1:6379> zadd myzset 1 a
(integer) 0
127.0.0.1:6379> zadd myzset 2 b
(integer) 1
127.0.0.1:6379> zadd myzset 3 c
(integer) 1
127.0.0.1:6379> zadd myzset 4 four 5 five
(integer) 2
127.0.0.1:6379> zrange myzset 0 -1
1) "a"
2) "b"
3) "c"
4) "four"
5) "five"
127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "a"
2) "1"
3) "b"
4) "2"
5) "c"
6) "3"
7) "four"
8) "4"
9) "five"
10) "5"
可以用zrem删除集合中的指定成员;用zremrangebyscore按分数范围删除指定成员:
127.0.0.1:6379> zrem myzset a
(integer) 1
127.0.0.1:6379> zremrangebyscore myzset 2 4
(integer) 3
127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "five"
2) "5"

二、python中的redis模块:
reids模块不是python标准模块,需要运行pip install redis进行安装。
可以用如下脚本查看redis模块的api:

import redis
r = redis.Redis(host="127.0.0.1",port=6379,password="12344321",db=0)
help(r)

1、连接redis:
单连接:

import redis
r = redis.Redis(host="127.0.0.1",port=6379,password="12344321",db=1)
r.set('name',"Donfag")
print(r.get("name"))

连接池:

pool = redis.ConnectionPool(host="127.0.0.1",port=6379,password="12344321",db=1)
r = redis.Redis(connection_pool=pool)
r.set('name',"Donfag2")
print(r.get("name"))

2、操作string类型
(1)、set(name,value,ex=None,px=None,nx=False,xx=False)
用于新增键/值对,参数说明如下:
name:键
value:值
ex:过期时间(单位:秒)
px:过期时间(单位:毫秒)
nx:如果设置为True,则只有name不存在时,当前set操作才能执行
xx:如果设置为True,则只有name存在时,当前set操作才能执行
示例代码:

import redis
pool = redis.ConnectionPool(host="127.0.0.1",port=6379,password="12344321",db=1)
r = redis.Redis(connection_pool=pool)
r.set('name',"Donfag2",ex=30)
print(r.get("name"))

设置name的过期时间是30秒,30秒后name会自动被删除。
(2)、setnx(name,value)
只有在name不存在时,才能进行设置操作,相当于:set(name,value,nx=True)
(3)、setex(name,time,value)
可以设置键值的过期时间,单位为秒,如:setex(name,30,value)相当于:set(name,value,ex=30)
(4)、psetex(name,time_ms,value)
可以设置键值的过期时间,单位为毫秒,如:psetex(name,10000,value)相当于:set(name,value,px=10000)
(5)、mset(*args,**kwargs)
用于批量设置键值对。根据映射设置键值对,可以单独提供一个字典参数,主要用法如下:
r.mset({'name3':'Donfag3','name4':'Donfag4'})
(6)、mget(keys,*args)
用于批量获致键值,如:
a = r.mget('name1','name2')
b = r.mget(['name3','name4'])
print(a)
print(b)
返回结果:
[b'Donfag1', b'Donfag2']
[b'Donfag3', b'Donfag4']
(7)、getset(name,value)
用于设置新值并返回原来的值。
(8)、getrange(key,start,end)
根据字节获取字符串。如:r.getrange('name2',0,3),获取到的结果是:Donf
(9)、setrange(name,offset,value)
从指定字符串索引位置开始向后替换字符串内容。如:r.setrange('name2',3,'gfang')如果name=Donfag2,修改后变为Dongfang
(10)、strlen(name)
返回name键对应值的字节长度。
(11)、append(key,value)
在name对应的值后面追加内容。如:
r.set('name','Zhang')
r.append('name','San')
print(r.get('name'))
获取的结果是:b'ZhangSan'
(12)、exists(name)
判断对应的键是否在存,存在返回True或则False
(13)、delete(name1,name2,...)
用于删除单个键或批量删除多个键,并返回删除的数量,如:
r.delete('name1')
r.delete('name2','name3','name4')

3、操作hash类型
(1)、hset(name,key,value)
设置name对应hash中的一个键值对,如果键值对不存在则创建。如果键值对存在则修改。如:r.hset('user','name','Donfag')
(2)、hmset(name,mapping)
批量设置键值对。如:r.hmset('user',{ 'name':'Donfag','age':20,'city':'ShangHai' })
不过此方法在python4.0及以上版本会弃用,可以直接使用hset方法。
(3)、hget(name,key)
获取name对应原key值。
(4)、hmget(name,key,*args)
批量获取name对应的hash中多个key值。如:r.hmget('user',['name','age'])

4、操作list类型
(1)、lpush(name,values)
在name对应的list里添加元素,每个新的元素都添加到列表的最左边。如:r.lpush('name',1,2,3,4)
(2)、linsert(name,where,refvalue,value)
name对应的列表的某一个值前或后插入一个新值、参数说明:
name:键
where:before或after
refvalue:在where前后插入的数据
value:要插入的数据
示例:
r.linsert('name',where='before',refvalue='2',value='a')
在此例中:向name列表中左边第一个出现的元素2前插入元素a
(3)、lset(name,index,value)
对name对应的列表的某一个索引位置赋值。如:
r.delete('name')
r.lpush('name',1,2,3)
r.lset('name',2,'b')
print(r.lrange('name',0,-1))
结果是:
['3', '2', 'b']
(4)、lrem(name,count,value)
在name对应的list中删除指定的值。示例:
r.delete('name')
r.lpush('name',1,2,3,4,8,8,8,9)
r.lrem('name',2,8)
print(r.lrange('name',0,-1))
返回结果:
['9', '8', '4', '3', '2', '1']
上例的意思是:删除列表name中第一次出现的2个元素8
(5)、lpop(name)
删除name列表左侧的第一个元素,并返回它的值。如:
r.delete('name')
r.lpush('name',1,2,3,4)
r.lpop('name')
print(r.lrange('name',0,-1))
返回结果:
['3', '2', '1']
(6)、lrange(name,start,end)
在name对应的列表分片获取数据,使用方法见上。

5、操作set类型
(1)、sadd(name,values)
为name集合添加一个或我个元素。如:r.sadd('myset',1,2,3)
(2)、scard(name)
获取集合name中的元素的个数。如:r.scard('myset')
(3)、smembers(name)
获取name集合中的所有元素。如:r.smembers('myset')
(4)、adiff(keys,args)
获取多个集合的差集。如:
r.sadd('set1',1,2,3)
r.sadd('set2',2,3,4)
print(r.sdiff('set1','set2'))
返回结果:{b'1'}
(5)、sinter(keys,args)
获取多个集合的交集。如:
r.delete('set1')
r.delete('set2')
r.sadd('set1',1,2,3)
r.sadd('set2',2,3,4)
print(r.sinter('set1','set2'))
返回结果:
{b'3', b'2'}
(6)、sunion(keys,args)
获取多个集合的并集。如:
r.delete('set1')
r.delete('set2')
r.sadd('set1',1,2,3)
r.sadd('set2',2,3,4)
print(r.sunion('set1','set2'))
返回结果:
{b'1', b'4', b'2', b'3'}

6、操作sorted set类型
(1)、zadd(args,kwargs)
的name对应的有序集合中添加元素和元素对应的分数。如:
r.zadd('myzset',{'a':1,'b':2,'c':3})
(2)、zcard(name)
获取name对应的有序集合中的元素个数。如:
r.zcard('myzset')
(3)、zrange(name,start,end,desc=False,withscores=False,score_cast_func=fload)
按照索引范围获取name集合的元素。如:
r.zadd('myzset',{'a':1,'b':2,'c':3})
print(r.zrange('myzset',0,-1,desc=True,withscores=True))
返回结果:
[(b'c', 3.0), (b'b', 2.0), (b'a', 1.0)]
(4)、zrem(name,values)
删除name集合中与vales对应的元素。如:
r.zadd('myzset',{'a':1,'b':2,'c':3})
r.zrem('myzset','a','b')
print(r.zrange('myzset',0,-1))
返回结果:
[b'c']
(5)、zscore(name,value)
获取name有序集合中与value对应的分数。如:
r.zadd('myzset',{'a':1,'b':2,'c':3})
print(r.zscore('myzset','c'))

7、其它操作
(1)、r.keys() 列出所有键
(2)、r.exists('name') 判断键是否存在。存在返回True,或者False
(3)、r.delete('name') 删除键。返回1或0
(4)、r.flushdb() 清除当前数据库所有数据。成功返回True,失败返回False

标签:127.0,name,myzset,0.1,redis,value,6379,模块
From: https://www.cnblogs.com/donfag/p/17770509.html

相关文章

  • ES6 module模块
    概述ES6中的module指的是JavaScript模块化规范中的一种。它通过export和import语法来导出和导入模块中的变量、函数、类等内容。使用ES6模块化的好处包括:解决了模块化的问题。消除了全局变量。管理加载顺序。使用在ES6模块中,一个文件代表一个模块当使用script标签加载模块时,需要......
  • Redis如何实现自动续期
    在Redis中,可以使用Lua脚本结合SET命令和EXPIRE命令来实现自动续期和加锁的操作。可以在给定的超时时间内自动续期锁。locallockKey=KEYS[1]--锁的键名locallockValue=ARGV[1]--锁的值locallockTimeout=tonumber(ARGV[2])--锁的超时时间(秒)--尝试获取锁l......
  • BOSHIDA AC/DC电源模块工作效率的特点
    BOSHIDAAC/DC电源模块工作效率的特点AC/DC电源模块是一种用来将交流电转换为直流电的设备,在各种电子设备中应用广泛。其中,工作效率是评价AC/DC电源模块性能的关键指标之一。下面将从工作效率的特点方面进行阐述,以帮助读者更好地理解AC/DC电源模块的工作原理和性能。 1.高效......
  • fastify-autoload + ncc + s3 实现模块的插件化开发加载
    以前简单说明过基于fastify-autoload的插件化加载fastify插件,方便实现开发,但是对于实际生产环境我们可以需要频繁的模块修改,发布以及构建,所以需要我们需要频繁的调整,不是很方便,我们可以基于ncc进行入口的打包,同时对于每个插件也基于ncc打包为独立的文件,这样我们开发的插件只需......
  • C2000 系列DSP使用Syscfg配置CLB模块记录
    1.1、SysConfig配置1、在工程下新建一个syscfg文件。注意文件的后缀名是.syscfg,命名任意。这时候会弹出一个弹窗,点击yes将SysConfig添加到该工程的toolchain。2、可以看到工程下多了一个GeneratedSource,并且打开工程属性,Build下也新加了SysConfig......
  • orchard core 搭建cms 加载其他模块的管理1
    有一个具体的例子:https://github.com/OrchardCMS/OrchardCore.Samples1、先使用教程,安装cms-可以是完全也可以是采用前后端分离管理。修改对应的program.cs的内容:`varbuilder=WebApplication.CreateBuilder(args);//Addservicestothecontainer.//builder.Service......
  • 搭建redis分片集群
    搭建redis分片集群第一章:测试环境搭建1.1、版本信息:操作系统:CentOS-7-x86_64-Minimal-2009.isoredis:6.0.81.2、地址规划与结构图ip地址端口描述192.168.118.20020300master1192.168.118.20020301slave2。从于192.168.118.201的master192.168.118.20120300master2192.168.118.20120......
  • 利用开源模块EF plus 添加系统审计功能
    我参考的网站内容:https://entityframework-plus.net/ef-core-audit-customizationhttps://entityframework-plus.net/ef-core-audit-autosavehttps://csharp.hotexamples.com/examples/Z.EntityFramework.Plus/Audit/-/php-audit-class-examples.htmlhttps://entityframework-p......
  • 前端模块化专题
    Commonjs(同步模块加载,运行时加载)exports和moudle.exports的区别?exports是module中exports对象的引用。当模块中使用了moudle.export={}的时候,所有exports都会失效。exports只能exports.a=a;这样使用,不能exports={};这种使用方式无效。每个模块其实都相......
  • redisson不同版本的配置地址格式问题
       不同版本的redisson在配置地址时需要注意例如3.2.0是127.0.0.1:63793.15.4是redis://127.0.0.1:6379 在用ip地址配置时需要注意在测试环境配置地址时因为时域名所以没有暴露出来  Releases·redisson/redisson·GitHub从redisson-3.4.3......