python redis详解(三)string字符串

本文详细介绍了Redis中的String类型,包括其二进制安全性、最大存储限制。重点讲解了Python通过redis库操作字符串的各种方法,如设置、获取、更新、过期时间设置等,并提供了相关命令和示例代码,帮助理解如何在Python中使用Redis处理字符串数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

String字符串

string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。

string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。

string类型是Redis最基本的数据类型,一个键最大能存储512MB。

python redis提供的方法与命令行基本一致, 具体的函数及含义可以参考给定的命令行来使用, 对应的函数名称与命令名称基本一致

命令

首先了解官方的命令, 具体如下:

1 SET key value 设置指定 key 的值
2 GET key 获取指定 key 的值。
3 GETRANGE key start end 返回 key 中字符串值的子字符
4 GETSET key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
5 GETBIT key offset 对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
6 MGET key1 [key2..] 获取所有(一个或多个)给定 key 的值。
7 SETBIT key offset value 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
8 SETEX key seconds value 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
9 SETNX key value 只有在 key 不存在时设置 key 的值。
10 SETRANGE key offset value 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
11 STRLEN key 返回 key 所储存的字符串值的长度。
12 MSET key value [key value ...] 同时设置一个或多个 key-value 对。
13 MSETNX key value [key value ...] 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
14 PSETEX key milliseconds value 这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。
15 INCR key 将 key 中储存的数字值增一。
16 INCRBY key increment 将 key 所储存的值加上给定的增量值(increment) 。
17 INCRBYFLOAT key increment 将 key 所储存的值加上给定的浮点增量值(increment) 。
18 DECR key 将 key 中储存的数字值减一。
19 DECRBY key decrement key 所储存的值减去给定的减量值(decrement) 。
20 APPEND key value 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
21 BITCOUNT 计算字符串中的设置位数(填充计数)
22 BITFIELD 该命令将Redis字符串视为位数组,并且能够寻址不同位宽和任意非(必要)对齐偏移的特定整数字段,BITFIELD能够在同一命令调用中使用多个位字段。它需要执行一系列操作,并返回一个回复数组,其中每个数组都匹配参数列表中的相应操作。
23 BITOP 在多个键(包含字符串值)之间执行按位操作,并将结果存储在目标键中, 该BITOP命令支持四个位运算:AND,OR,XOR 和NOT
24 BITPOS 返回位置,将字符串视为从左到右的位数组,其中第一个字节的最高有效位在位置0,第二个字节的最高有效位在第8位,依此类推


python-redis

python操作redis的string类型提供的一些方法如下,也可以参考命令使用,函数名称与命令基本一致

1.def set(self, name, value, ex=None, px=None, nx=False, xx=False):
在Redis中设置值,默认情况下,不存在则创建,存在则修改
参数:
ex,过期时间(秒)
px,过期时间(毫秒)
nx,如果设置为True,则只有name不存在时,当前set操作才执行
xx,如果设置为True,则只有name存在时,set操作才执行

print rediscli.set('sme1', 'xv1', ex=1800)
print rediscli.set('sme1', 'xv2', ex=1800)
print rediscli.get('sme1')


输出:
True
True
xv2

说明覆盖了之前的值

2.def get(self, name):
获取值

3.def setnx(self, name, value)
设置值,只有name不存在时,执行设置操作(添加
rediscli.setnx('sme1', 'xv3')

4.def setex(self, name, time, value):

    设置值, 存在时进行设置,相当于更新
	time,过期时间(数字秒 或 timedelta对象)
	
	print rediscli.setex('sme1', 1800, 'xv4')
	

5 .def getrange(self, key, start, end)

获取子序列(根据字节获取,非字符)

name,Redis 的 name
start,起始位置(字节)
end,结束位置(字节)

6.def getset(self, name, value)
设置新值并获取原来的值

7.def getbit(self, name, offset)
获取name对应的值的二进制表示中的某位的值 (0或1)

8.psetex(name, time_ms, value)

		设置值
		time_ms,过期时间(数字毫秒 或 timedelta对象)

9.mset(*args, **kwargs)

	批量设置值
	mset(k1='v1', k2='v2')
	mget({'k1': 'v1', 'k2': 'v2'})

10.def mget(self, keys, *args)

	批量获取
	keys为list或者是集合

	 print rediscli.set('sme2', 'xb1')
	print rediscli.mget(keys=['sme1', 'sme2'])

11.setrange(name, offset, value)

```
修改字符串内容,从指定字符串索引开始向后替换(新值太长时,则向后添加)
offset,字符串的索引,字节(一个汉字三个字节)
```

12.setbit(name, offset, value)

	对name对应值的二进制表示的位进行操作
	
	offset,位的索引(将值变换成二进制后再进行索引)
	value,值只能是 1 或 0
	
	注:如果在Redis中有一个对应: n1 = "foo",
	      那么字符串foo的二进制表示为:01100110 01101111 01101111
	  所以,如果执行 setbit('n1', 7, 1),则就会将第7位设置为1,
	      那么最终二进制则变成 01100111 01101111 01101111,即:"goo"

13.bitcount(key, start=None, end=None)

	 获取name对应的值的二进制表示中 1 的个数
	start,位起始位置
	end,位结束位置

14.bitop(operation, dest, *keys)

	获取多个值,并将值做位运算,将最后的结果保存至新的name对应的值

	operation,AND(并) 、 OR(或) 、 NOT(非) 、 XOR(异或)
	dest, 新的Redis的name
	*keys,要查找的Redis的name
	 
	如:
	bitop("AND", 'new_name', 'n1', 'n2', 'n3')
	 获取Redis中n1,n2,n3对应的值,然后讲所有的值做位运算(求并集),然后将结果保存 new_name 对应的值中

15.strlen(name)

	返回name对应值的字节长度(一个汉字3个字节)

16.incr(self, name, amount=1)

	自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增。

	print rediscli.set('sme3', 5)
	print rediscli.incr('sme3', amount=3)

17.incrbyfloat(self, name, amount=1.0)

	自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增。
	mount,自增数(浮点型)

18.decr(self, name, amount=1)

	自减 name对应的值,当name不存在时,则创建name=amount,否则,则自减。
	amount,自减数(整数)
	
	print rediscli.decr('sme3', amount=1)

19.append(key, value)

 在redis name对应的值后面追加内容
 参数:
 key, redis的name
 value, 要追加的字符串


​ rediscli.append(‘sme1’, ‘_add’)
​ print rediscli.get(‘sme1’)

​ 输出
​ update-getset_add


示例程序
# coding:utf-8

import redis

rediscli = redis.Redis(host='127.0.0.1', port=6379, db=13)

print rediscli.set('sme1', 'xv1', ex=1800)
print rediscli.set('sme1', 'xv2', ex=1800)
print rediscli.get('sme1')
print rediscli.getrange('sme1', 3, 6)
print rediscli.getset('sme1', 'update-getset')
print rediscli.getbit('sme1', 8)

print rediscli.set('sme2', 'xb1')
print rediscli.mget(keys=['sme1', 'sme2'])

print rediscli.setnx('sme1', 'xv3')
print rediscli.setex('sme1', 1800, 'xv4')
print rediscli.get('sme1')

print rediscli.set('sme3', 5)
print rediscli.incr('sme3', amount=3)
print rediscli.get('sme3')
print rediscli.decr('sme3', amount=1)
print rediscli.get('sme3')
print rediscli.append('sme1', '_add')
print rediscli.get('sme1')

输出结果:

True
True
xv2

xv2
0
True
['update-getset', 'xb1']
False
True
xv4
True
8
8
7
7
7
xv4_add

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值