python redis详解(三)string字符串
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
还没有评论,来说两句吧...