python redis详解(三)string字符串

Love The Way You Lie 2021-12-10 11:37 642阅读 0赞

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操作才执行

  1. print rediscli.set('sme1', 'xv1', ex=1800)
  2. print rediscli.set('sme1', 'xv2', ex=1800)
  3. print rediscli.get('sme1')
  4. 输出:
  5. True
  6. True
  7. xv2
  8. 说明覆盖了之前的值

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

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

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

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

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

  1. 获取子序列(根据字节获取,非字符)
  2. nameRedis name
  3. start,起始位置(字节)
  4. end,结束位置(字节)

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

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

8.psetex(name, time_ms, value)

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

9.mset(*args, **kwargs)

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

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

  1. 批量获取
  2. keyslist或者是集合
  3. print rediscli.set('sme2', 'xb1')
  4. print rediscli.mget(keys=['sme1', 'sme2'])

11.setrange(name, offset, value)

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

12.setbit(name, offset, value)

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

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

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

14.bitop(operation, dest, *keys)

  1. 获取多个值,并将值做位运算,将最后的结果保存至新的name对应的值
  2. operation,AND(并) OR(或) NOT(非) XOR(异或)
  3. dest, 新的Redisname
  4. *keys,要查找的Redisname
  5. 如:
  6. bitop("AND", 'new_name', 'n1', 'n2', 'n3')
  7. 获取Redisn1,n2,n3对应的值,然后讲所有的值做位运算(求并集),然后将结果保存 new_name 对应的值中

15.strlen(name)

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

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

  1. 自增 name对应的值,当name不存在时,则创建nameamount,否则,则自增。
  2. print rediscli.set('sme3', 5)
  3. print rediscli.incr('sme3', amount=3)

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

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

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

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

19.append(key, value)

  1. redis name对应的值后面追加内容
  2. 参数:
  3. key, redisname
  4. value, 要追加的字符串


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

​ 输出
​ update-getset_add


示例程序

  1. # coding:utf-8
  2. import redis
  3. rediscli = redis.Redis(host='127.0.0.1', port=6379, db=13)
  4. print rediscli.set('sme1', 'xv1', ex=1800)
  5. print rediscli.set('sme1', 'xv2', ex=1800)
  6. print rediscli.get('sme1')
  7. print rediscli.getrange('sme1', 3, 6)
  8. print rediscli.getset('sme1', 'update-getset')
  9. print rediscli.getbit('sme1', 8)
  10. print rediscli.set('sme2', 'xb1')
  11. print rediscli.mget(keys=['sme1', 'sme2'])
  12. print rediscli.setnx('sme1', 'xv3')
  13. print rediscli.setex('sme1', 1800, 'xv4')
  14. print rediscli.get('sme1')
  15. print rediscli.set('sme3', 5)
  16. print rediscli.incr('sme3', amount=3)
  17. print rediscli.get('sme3')
  18. print rediscli.decr('sme3', amount=1)
  19. print rediscli.get('sme3')
  20. print rediscli.append('sme1', '_add')
  21. print rediscli.get('sme1')

输出结果:

  1. True
  2. True
  3. xv2
  4. xv2
  5. 0
  6. True
  7. ['update-getset', 'xb1']
  8. False
  9. True
  10. xv4
  11. True
  12. 8
  13. 8
  14. 7
  15. 7
  16. 7
  17. xv4_add

发表评论

表情:
评论列表 (有 0 条评论,642人围观)

还没有评论,来说两句吧...

相关阅读