Redis系列(二)、数据类型之字符串String

目录

介绍

命令行模式

计数

追加

长度

Python客户端

环境

创建连接

计数

追加

长度


Redis支持五种数据类型:String, Hash, List, Set, ZSet,这个系列介绍一下如何使用这些数据类型,本篇介绍使用命令行模式以及python客户端对redis进行操作,实际项目的过程中也大多是一模一样的用法。

相关内容:

Redis系列(一)、CentOS7下安装Redis6.0.3稳定版

------------------------Redis字符串类型----------------------

介绍

Redis的String类型可以是字符串(简单的字符串、复杂的字符串(例如JSON、XML))、数字(整数、浮点数),甚至是二进制(图片、音频、视频),但是值最大不能超过512MB;

 

命令行模式

进入命令行模式:

redis-cli -a password_value

redis-cli -a password_value --raw
--raw 避免中文显示乱码

 

help

使用下面的命令查看手册:

help @string

 Redis系列(二)、数据类型之字符串String_第1张图片

exists 

查看key是否存在,返回true / false, 1/0

exists key

 Redis系列(二)、数据类型之字符串String_第2张图片

set

set,setex,psetex,setnx

#ex为多少秒过期 px为多少毫秒过期,nx为若不存在才创建,xx为若存在才覆盖创建
set key value [ex seconds] [px milliseconds] [nx|xx]

使用set命令新增一个键值对,EX,PX用法:

127.0.0.1:6379> set name 王义凯
OK
127.0.0.1:6379> get name
"\xe7\x8e\x8b\xe4\xb9\x89\xe5\x87\xaf"   
127.0.0.1:6379> set name wang,yikai
OK
127.0.0.1:6379> get name
"wang,yikai"
127.0.0.1:6379> set name_ex wyk ex 10
OK
127.0.0.1:6379> ttl name_ex
(integer) 2
127.0.0.1:6379> ttl name_ex
(integer) -2
127.0.0.1:6379> get name_ex
(nil)
127.0.0.1:6379> set name_px wyk px 10000
OK
127.0.0.1:6379> ttl name_px
(integer) 4
127.0.0.1:6379> ttl name_px
(integer) 0
127.0.0.1:6379> get name_px
(nil)
127.0.0.1:6379> setex name_ex 10 wyk
OK
127.0.0.1:6379> ttl name_ex
(integer) 3
127.0.0.1:6379> ttl name_ex
(integer) 0
127.0.0.1:6379> get name_ex
(nil)
127.0.0.1:6379> psetex name_px 10000 wyk
OK
127.0.0.1:6379> ttl name_px
(integer) 3
127.0.0.1:6379> ttl name_px
(integer) -2
127.0.0.1:6379> get name_px
(nil)

Redis系列(二)、数据类型之字符串String_第3张图片

 SET中 NX,XX用法:

127.0.0.1:6379> set name_csdn wyk
OK
127.0.0.1:6379> get name_csdn
"wyk"
127.0.0.1:6379> set name_csdn wyk2
OK
127.0.0.1:6379> get name_csdn
"wyk2"
127.0.0.1:6379> set name_nx wyk nx
OK
127.0.0.1:6379> get name_nx
"wyk"
127.0.0.1:6379> set name_nx wyk2 nx
(nil)
127.0.0.1:6379> get name_nx
"wyk"
127.0.0.1:6379> setnx name_nx wyk2
(integer) 0
127.0.0.1:6379> get name_nx
"wyk"
127.0.0.1:6379> set name_xx wyk xx
(nil)
127.0.0.1:6379> get name_xx
(nil)
127.0.0.1:6379> set name_xx wyk
OK
127.0.0.1:6379> get name_xx
"wyk"
127.0.0.1:6379> set name_xx wyk2 xx
OK
127.0.0.1:6379> get name_xx
"wyk2"

 Redis系列(二)、数据类型之字符串String_第4张图片

mset

mset,msetnx

同时定义多个键值对,mset也可以和nx一起用:

mset key1 value1 [key2 value2...] #批量创建kv,已存在的会被更新
msetnx key1 value1 [key2 value2...] #批量创建kv,所有key不存在才会创建
127.0.0.1:6379> mset k1 a k2 b k3 c
OK
127.0.0.1:6379> mget k1 k2 k3
1) "a"
2) "b"
3) "c"

 

del

使用del命令删除数据,可批量可单个删除:

 del key1 [key2 key3...]
127.0.0.1:6379> del k1 k2 k3
(integer) 3
127.0.0.1:6379> del name_xx
(integer) 1
127.0.0.1:6379> mget k1 k2 k3 name_xx name_nx
1) (nil)
2) (nil)
3) (nil)
4) (nil)
5) "wyk"

Redis系列(二)、数据类型之字符串String_第5张图片

set

上面set中介绍了,如果对同一个key进行set即可更新该数据:

127.0.0.1:6379> set email [email protected]
OK
127.0.0.1:6379> get email
"[email protected]"
127.0.0.1:6379> set email [email protected]
OK
127.0.0.1:6379> get email
"[email protected]"

Redis系列(二)、数据类型之字符串String_第6张图片

getset

等同于get+set,执行此命令返回get的结果,然后将该key更新为新的value,下次再get的时候查到的就是新的value:

getset key new_value
>>old_value
get key
>>new_value

Redis系列(二)、数据类型之字符串String_第7张图片

setrange

对指定下标的字符串进行更新,下标从0开始算起:

setrange key offeset value

Redis系列(二)、数据类型之字符串String_第8张图片

keys

查看所有的key

keys *

 Redis系列(二)、数据类型之字符串String_第9张图片

get

使用get获得指定key的value

get key

mget

使用mget批量获得指定keys的values

mget key1 [key2 key3...]

getrange

 从字符串的指定开始结束下标截取字符串返回,下标从0开始算起:

getrange key start end

Redis系列(二)、数据类型之字符串String_第10张图片

计数

incr

对指定的key的value加1,递增步长默认1,如果key不存在,其初始值为0,在incr之后其值为1,如果value的值不能转为整型,如hello,该操作将执行失败并返回相应的错误信息:

incr key

 Redis系列(二)、数据类型之字符串String_第11张图片

decr

对指定的key的value减1,递减步长默认1,如果key不存在,其初始值为0,在decr之后其值为-1,如果value的值不能转为整型,如hello,该操作将执行失败并返回相应的错误信息:

decr key

 Redis系列(二)、数据类型之字符串String_第12张图片

incrby

对指定的key的value加指定的步长,递增步长可指定,如果key不存在,其初始值为0,在incrby之后其值为步长,如果value的值不能转为整型,如hello,该操作将执行失败并返回相应的错误信息:

#步长increment为整数,当为负数时效果等于递减
incrby key increment

 Redis系列(二)、数据类型之字符串String_第13张图片

decrby

对指定的key的value减指定的步长,递减步长可指定,如果key不存在,其初始值为0,在decrby之后其值为步长的负数,如果value的值不能转为整型,如hello,该操作将执行失败并返回相应的错误信息:

#步长increment为整数,当为负数时效果等于递増
decrby key increment

Redis系列(二)、数据类型之字符串String_第14张图片

incrbyfloat

效果与incrby类似,此方法支持传浮点型的值,正数为增,负数为减
 

追加

append

在字符串最后面追加子串:

append key value

 Redis系列(二)、数据类型之字符串String_第15张图片

长度

strlen

返回字符串的长度:

strlen key

 

Python客户端

下面介绍如何在python客户端实现和上面一样的操作,每个函数的含义不多赘述,在上面都有很详细的介绍了。

环境

#Redis6.0.3
pip install redis==3.4.1

创建连接

import redis

#redis返回的结果默认是字节类型,设置decode_responses=True改成字符串
#直接获得连接
r = redis.StrictRedis(host='wykd', port=6379, db=0,password='123456', decode_responses=True)

#使用连接池创建连接
pool = redis.ConnectionPool(host='wykd', port=6379, password='123456', decode_responses=True)
r1 = redis.Redis(connection_pool=pool)
r2 = redis.Redis(connection_pool=pool)

Redis系列(二)、数据类型之字符串String_第16张图片

set

通过这些函数可以看到,函数名和上面的redis命令行模式里一样,甚至参数也是一样的使用方式:

Redis系列(二)、数据类型之字符串String_第17张图片

Redis系列(二)、数据类型之字符串String_第18张图片

r.set('python_key1','python_value1')
r.get('python_key1')
r.set('py_ex','ppp',ex=10)     #创建10秒过期的kv,单位秒
r.ttl('py_ex')                 #查看剩余过期时间,单位为秒
r.set('py_ex','ppp',px=10000)  #创建10000毫秒过期的kv,单位毫秒
r.set('py','3.7',nx=True)      #当不存在key时才会创建
r.set('py','3.7.1',xx=True)    #当key存在时才会更新

Redis系列(二)、数据类型之字符串String_第19张图片

mset

r.mset({'k1':'v1','k2':'v2','k3':'v3'}) #批量创建更新key
r.msetnx({'k1':'v1','k5':'v5'}) #所有key都不存在的时候才会批量创建
r.msetnx({'k4':'v4','k5':'v5'})

Redis系列(二)、数据类型之字符串String_第20张图片

del

r.delete('k5') #批量或逐个删指定的key

Redis系列(二)、数据类型之字符串String_第21张图片

set

r.set('A','aaa')
r.set('A','bbb') #key相同会被更新
r.get('A')

Redis系列(二)、数据类型之字符串String_第22张图片

getset

r.get('A') #old value
r.getset('A','ccc') #先返回old value 再修改为new value
r.get('A') #new value

Redis系列(二)、数据类型之字符串String_第23张图片

setrange

r.setrange('A',0,'AA') #从指定下标开始修改字符串

Redis系列(二)、数据类型之字符串String_第24张图片

keys

#参数为pattern,返回所有的key的列表
r.keys('*')

Redis系列(二)、数据类型之字符串String_第25张图片

get

r.get('A')

 

mget

r.mget(['k1','k2','k3','k5']) #传参为列表

 

getrange

r.getrange('A',0,2) #根据start和end下标截取字符串返回

Redis系列(二)、数据类型之字符串String_第26张图片

计数

incr

python客户端中incr和incrby的函数一样:

源码:

Redis系列(二)、数据类型之字符串String_第27张图片

因此我们可以使用amount参数来选择步长:

#步长可以为负数,但必须是整数
r.set('int1','1')
r.incr('int1') #默认步长为1
r.incrby('int1') #默认步长为1
r.incr('int1',amount=2) #设置步长为2
r.incrby('int1',amount=2) #设置步长为2

Redis系列(二)、数据类型之字符串String_第28张图片

decr

python客户端中decr和decrby的函数一样:

源码:

Redis系列(二)、数据类型之字符串String_第29张图片

因此我们可以使用amount参数来选择步长:

#步长可以为负数,但必须是整数
r.decrby('int1',amount=2) #设置步长为2
r.decrby('int1',amount=-2) #设置步长为-2
r.decr('int1',amount=-2) #设置步长为-2
r.decr('int1',amount=2) #设置步长为2

Redis系列(二)、数据类型之字符串String_第30张图片

 

incrby

同incr

decrby

同decr

 

追加

append

r.append('A','bcd') #从value字符串后面追加子串,返回追加后的字符串长度
r.append('A','efg')

Redis系列(二)、数据类型之字符串String_第31张图片

长度

strlen

r.strlen('A') #返回value字符串的长度

 

希望本文对你有帮助,请点个赞鼓励一下作者吧~ 谢谢!

你可能感兴趣的:(Python全栈开发,#,Redis)