Redis 数据类型操作与 Python 中的操作

目录

redis 基本操作

1.string 类型

创建键值对 ,如果创建的值有空格,就用双引号包起来,并查看

如果要修改某个键的值,以存在就覆盖,没存在就创建,但不想覆盖后面可加参数 NX

想给原字符串末尾加其他字符串,append

字符串可以是数字,还可以给它做运算

2.hash 类型

hset ,hmset ,hget ,hmget

3.list 类型

lpush 往 country 中添加了 china,USA,UK,使用 lrange 从指定起始位置取出 country 中的值,如果一个值本身有空格要用双引号包起来

查看列表长度,llen

查看数据,lrange, 与 python 列表相似

弹出数据,lpop,rpop,弹出后列表里面的会被删除

修改数据,lset key index 新的值

ltrim 保留指定数据,其他删除

4.set 类型

sadd 添加,smember 查看集合数据

scard 查看集合有几个元素

spop 从集合中弹出数据

sismember 判断是否包含某个元素

srem 删除数据

sinter 集合交集

sunion 集合并集

sdiff 集合差集

5.sorted 有序 set 类型

zadd

​zrevrank,zrank

zincrby,zscore

zcard,zcount

zrangebyscore ,zrevrangebyscore

6.查看当前有哪些 key

7.“发布/订阅”模式实现消息队列 

python中的操作

1.建立连接

2.操作 string 类型

set(name,value,ex=None,px=None,nx=False,xx=False)

获取字符串

在以有字符串后面加,append

对数字字符串加减

3.列出所有 keys

4.操作列表

插入数据,返回列表长度

读取数据

查看列表长度

获取一定索引的数据

for 循环展开数据,列表默认返回时 ‘bytes’ 类型数据,要解码

弹出数据,弹出了 redis 里面就删除了

修改数据

5.集合

插入数据

 读取数据

删除数据

集合运算

6.ttl 检查 key 剩余时间

7.哈希表

hset ,hmset

hkeys

hget , hmget , hgetall

hexists ,hlen

hdel

8.“发布/订阅”模式实现消息队列 

9.有序 set 类型

zadd

zincrby

zrangebyscore , zrevrangebyscrore

zrange,zrevrange

zrank,zrevrank

zscore,zcard,zcount


redis 基本操作

1.string 类型

创建键值对 ,如果创建的值有空格,就用双引号包起来,并查看

如果要修改某个键的值,以存在就覆盖,没存在就创建,但不想覆盖后面可加参数 NX

想给原字符串末尾加其他字符串,append

字符串可以是数字,还可以给它做运算

  • incr 加 1
  • decr 减 1
  • incrby 增加 n
  • decrby 减少 n

 

2.hash 类型

hset ,hmset ,hget ,hmget

设置了 key 为 person、field 为 name、value 为 zjk 的 hash 数据,hmset 可以设置多个 field 值

 

 

 

3.list 类型

lpush 往 country 中添加了 china,USA,UK,使用 lrange 从指定起始位置取出 country 中的值,如果一个值本身有空格要用双引号包起来

查看列表长度,llen

查看数据,lrange, 与 python 列表相似

弹出数据,lpop,rpop,弹出后列表里面的会被删除

修改数据,lset key index 新的值

ltrim 保留指定数据,其他删除

 

4.set 类型

sadd 添加,smember 查看集合数据

smember 数据量大,慎用,I/O 资源会耗尽

添加四次数据,重复的会被忽略,最后通过 smembers 获取 url 中的值,只有三条数据,这就可以使用 set 类型进行 url 去重

如果单独插入数据,存在返回 0,不存在插入,返回 1

scard 查看集合有几个元素

spop 从集合中弹出数据

spop key count

count 可省略,默认获取 1 条,如果大于 1 条会随机获取多条条数据,大于集合总数获取全部

sismember 判断是否包含某个元素

存在返回 1,不存在返回 0

srem 删除数据

sinter 集合交集

sunion 集合并集

sdiff 集合差集

 

5.sorted 有序 set 类型

在 set 的基础上增加了一个顺序属性,会关联一个 double 类型的 score,这一属性在添加和修改元素的时候可以指定,每次指定后,sorted set 会自动重新按新的值调整顺序,sorted set 是唯一的,score 却可以重复

zadd 有序集合名 评分1 值1 评分n 值n

zadd

添加了四次数据,重复的会被忽略,zrangebyscore 根据 score 范围获取 web 中的值,flask 重复了,覆盖前面的


zrevrank,zrank

查询值的评分,查询值的排名

zrank 有序集合 值
zrevrank 有序集合 值

zincrby,zscore

  • zincrby:修改评分
  • zscore:查看评分
zincrby 有序集合名 增加(减少)分数值 值
zscore 有序集合名 值

zcard,zcount

查询有序集合元素中的个数,查询评分范围内的元素个数

zcard 有序集合名
zcount 有序集合名 积分下限 积分上限

zrangebyscore ,zrevrangebyscore

zrangebyscore 有序列表名 评分下限 评分上限 withscores limit 切片开始位置 结果数量
zrevangebyscore 有序列表名 评分下限 评分上限 withscores limit 切片开始位置 结果数量

withsores 可省略,省略后只有值没有评分

如不需要对结果切片,则 limit 切片开始位置 结果数量 可省略

 

6.查看当前有哪些 key

keys *

 

7.“发布/订阅”模式实现消息队列 

# 发布
publish 频道名 信息
# 订阅
subscribe 频道1 频道2 频道n

 

 

python中的操作

1.建立连接

import redis

r = redis.Redis(host='127.0.0.1',port=6379)
r.set('name','zzz')
print(r.get('name'))

或者使用连接池管理 redis 连接,避免每次建立、释放连接的开销

import redis

pool = redis.ConnectionPool(host='127.0.0.1',port=6379)
r = redis.Redis(connection_pool=pool)
r.set('name','jjj')
print(r.get('name'))

 

2.操作 string 类型

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)
r = redis.Redis(connection_pool=pool)
r.set('name','jjj',ex=3)
print(r.get('name'))

3 秒之后,name 的值为 None

获取字符串

在以有字符串后面加,append

对数字字符串加减

 

 

3.列出所有 keys

print(client.keys())

 

4.操作列表

插入数据,返回列表长度

单条

多条,方法1:少量可以

多条,方法2:数据量较大时

 

读取数据

查看列表长度

获取一定索引的数据

for 循环展开数据,列表默认返回时 ‘bytes’ 类型数据,要解码

弹出数据,弹出了 redis 里面就删除了

修改数据

 

5.集合

插入数据

已在集合中是不会把重复的插进去

 读取数据

scard 读取条数

循环打印数据

smember 获取全部数据

删除数据

集合运算

交集,并集,差集,sinter,sunion,sdiff

 

6.ttl 检查 key 剩余时间

key 不存在,返回 None,如果 key 没有过期,返回 -1,如果 key 有过期时间,返回剩余时间(正整数)

 

7.哈希表

hset ,hmset

  • hset 一次只能添加一个键值对
  • hmset 一次可以添加多个键值对
client.hset('key','字段名','值')
client.hmset('key',{'字段名1':'值1','字段名':'值2','字段名n':'值n'})

值是字典形式,需要用 json.dumps({}) 把其中的字典转为 json

hkeys

用于获取所有字段名,返回的数据是包含 bytes 类型数据列表

field_name = client.hkeys('哈希表名')

hget , hmget , hgetall

  • hget:获取一个字段的值,表名不存在或字段名不存在,都会返回 None
  • hmget:一次性获取多个字段的值,表不存在,所有元素返回 None;部分字段不存在,这部分返回 None
  • hgetall:获取一个哈希表中的所有字段名和值,查询出来的数据是 bytes 类型
client.hget(哈希表名,字段名)
client.hmget(哈希表名,[字段名1,字段名2,字段名n])
client.hgetall(哈希表名)

hexists ,hlen

  • hexists:判断一个哈希表中是否有某个字段,不存在返回 None,存在返回 True
  • hlen:哈希表中有多少个字段,哈希表不存在,则返回 0

hdel

client.hdel('哈希表名',字段名,字段值)

 

8.“发布/订阅”模式实现消息队列 

client.publish('频道名','消息')

发送端:

import redis
import json
import datetime


client = redis.Redis()

while True:
    message = input('请输入需要发布的信息:')
    now_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    data = {'message': message, 'time': now_time}
    
    # 把信息以 json 字符串形式发布到名为 pubinfo 的频道中
    client.publish('pubinfo', json.dumps(data))

接收端:

import redis
import json

client = redis.Redis()

# 生成一个发布/订阅对象,忽略订阅成功的信息
listener = client.pubsub(ignore_subscribe_messages=True)
 
# 订阅名为 computer 的频道,可订阅多个频道
listener.subscribe('computer')

# 从频道获取数据,listener.listen() 为阻塞方式,如没有数据频道就会卡住等到有数据
for message in listener.listen():
    channel = message['channel'].decode()
    data = message['data'].decode()
    print(f'频道:{channel} 发了一条新信息:{data}')

 

9.有序 set 类型

zadd

添加数据

# 方1
client.zadd('有序集合名','值1','评分1','值n','评分n')
# 方2
client.zadd('有序集合名',值1=评分1,值2=评分2)

zincrby

修改数据

client.zincrby('有序集合名',值,该变量)

zrangebyscore , zrevrangebyscrore

  • zrangebyscore:从小到大排序
  • zrevrangebyscrore:从大到小排序

基于评分范围进行排序,返回列表的长度,其中,结果切片起始位置,结果数量这两个参数可以同时省略,省略表示返回排序后的所有数据。

withscores 为 False,返回结果直接是排序好的值;True 返回的列表里面的元祖,第一个是值,第二个是 评分。

client.zrangebyscrore('有序集合名',评分上限,评分下限,结果切片起始位置,结果数量,                        
                      withscores=True)
client.zrevrangebyscrore('有序集合名',评分上限,评分下限,结果切片起始位置,结果数量,                        
                      withscores=True)

zrange,zrevrange

  • zrange:对评分按照从小到大排序
  • zrevrange:对评分按照从大到小排序

基于位置范围排序

client.zrange('有序集合名',开始位置(含),结束位置(含),desc=False,withscores=False)
client.zrevrange('有序集合名',开始位置(含),结束位置(含),withscores=False)

withscores 为 False,返回结果直接是排序好的值;True 返回的列表里面的元祖,第一个是值,第二个是 评分

zrank,zrevrank

根据值查询排名,值查询评分

  • zrank:如果值存在,返回值的排名,排名是从 0 开始的,评分越小排名越靠前,评分越小排名越靠近 0,评分最小的值的排名为 0,值不存在,返回 None
  • zrevrank:如果值存在,返回值的排名,排名是从 0 开始的,评分越大排名越靠前,评分越大排名越靠近 0,评分最大的值的排名为 0,值不存在,返回 None
client.zrank('有序列表名','值')
client.zrevrank('有序列表名','值')

zscore,zcard,zcount

  • zscore:查询一个值的评分
  • zcard:查询有序集合里面一共有多少个值
  • zcount:查询在某个评分范围内的值有多少
client.zscore('有序列表名','值')
client.zcard('有序集合名')
client.zcount('有序集合名',评分下限,评分上限)

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值