目录
介绍
命令行模式
増
删
改
查
计数
追加
长度
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 @string
查看key是否存在,返回true / false, 1/0
exists key
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)
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"
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 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"
上面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]"
等同于get+set,执行此命令返回get的结果,然后将该key更新为新的value,下次再get的时候查到的就是新的value:
getset key new_value
>>old_value
get key
>>new_value
对指定下标的字符串进行更新,下标从0开始算起:
setrange key offeset value
查看所有的key
keys *
使用get获得指定key的value
get key
使用mget批量获得指定keys的values
mget key1 [key2 key3...]
从字符串的指定开始结束下标截取字符串返回,下标从0开始算起:
getrange key start end
对指定的key的value加1,递增步长默认1,如果key不存在,其初始值为0,在incr之后其值为1,如果value的值不能转为整型,如hello,该操作将执行失败并返回相应的错误信息:
incr key
对指定的key的value减1,递减步长默认1,如果key不存在,其初始值为0,在decr之后其值为-1,如果value的值不能转为整型,如hello,该操作将执行失败并返回相应的错误信息:
decr key
对指定的key的value加指定的步长,递增步长可指定,如果key不存在,其初始值为0,在incrby之后其值为步长,如果value的值不能转为整型,如hello,该操作将执行失败并返回相应的错误信息:
#步长increment为整数,当为负数时效果等于递减
incrby key increment
对指定的key的value减指定的步长,递减步长可指定,如果key不存在,其初始值为0,在decrby之后其值为步长的负数,如果value的值不能转为整型,如hello,该操作将执行失败并返回相应的错误信息:
#步长increment为整数,当为负数时效果等于递増
decrby key increment
在字符串最后面追加子串:
append key value
返回字符串的长度:
strlen key
下面介绍如何在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命令行模式里一样,甚至参数也是一样的使用方式:
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存在时才会更新
r.mset({'k1':'v1','k2':'v2','k3':'v3'}) #批量创建更新key
r.msetnx({'k1':'v1','k5':'v5'}) #所有key都不存在的时候才会批量创建
r.msetnx({'k4':'v4','k5':'v5'})
r.delete('k5') #批量或逐个删指定的key
r.set('A','aaa')
r.set('A','bbb') #key相同会被更新
r.get('A')
r.get('A') #old value
r.getset('A','ccc') #先返回old value 再修改为new value
r.get('A') #new value
r.setrange('A',0,'AA') #从指定下标开始修改字符串
#参数为pattern,返回所有的key的列表
r.keys('*')
r.get('A')
r.mget(['k1','k2','k3','k5']) #传参为列表
r.getrange('A',0,2) #根据start和end下标截取字符串返回
python客户端中incr和incrby的函数一样:
源码:
因此我们可以使用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
python客户端中decr和decrby的函数一样:
源码:
因此我们可以使用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
同incr
同decr
r.append('A','bcd') #从value字符串后面追加子串,返回追加后的字符串长度
r.append('A','efg')
r.strlen('A') #返回value字符串的长度
希望本文对你有帮助,请点个赞鼓励一下作者吧~ 谢谢!