redis基本操作及python操作redis
redis基本操作
·
文章目录
Redis简介:
Redis是用C语言开发的一个开源的高性能键值对数据库,它拥有高性能、持多种数据结构、丰富的功能以及高可用分布式等特点的非关系型数据库。
reids中的key都是字符串,redis主要分为五大数据结构:字符串、哈希、列表、集合、有序集合。
应用场景:
String:验证码,普通计数
Hash:个人信息,
List:消息队列
set:求交集、并集、差集
zset:排行榜
Redis之keys
keys
# keys * 查看所有键
127.0.0.1:6379> keys *
1) "s1"
2) "h1"
3) "ss1"
4) "l1"
5) "z1"
127.0.0.1:6379>
keys s*模糊匹配
# 模糊匹配
127.0.0.1:6379> keys s*
1) "s1"
2) "ss1"
exists
# 判断键是否存在,存在返回1,不存在返回0
127.0.0.1:6379> exists s1
(integer) 1
127.0.0.1:6379> exists b1
(integer) 0
expire
# expire设置过期时间
127.0.0.1:6379> expire s1 20
(integer) 1
# 查看存活时间,-1表示永久存活,-2表示已过期
127.0.0.1:6379> ttl s1
(integer) 12
127.0.0.1:6379> ttl s1
(integer) -2
127.0.0.1:6379> ttl l1
(integer) -1
persist
# persist 持久化键
127.0.0.1:6379> expire s1 100
(integer) 1
127.0.0.1:6379> ttl s1
(integer) 97
127.0.0.1:6379> persist s1
(integer) 1
127.0.0.1:6379> ttl s1
(integer) -1
rename
# rename对键重命名
127.0.0.1:6379> rename ss1 ss
OK
127.0.0.1:6379> keys *
1) "s1"
2) "ss"
3) "h1"
4) "l1"
5) "z1"
del
# del 删除键
127.0.0.1:6379> del s1
(integer) 1
127.0.0.1:6379> keys *
1) "ss"
2) "h1"
3) "l1"
4) "z1"
Redis之String
set、get
# set设置key值,若key存在,则覆盖key值,不存在,则新建
127.0.0.1:6379> set s1 a
OK
# get 获取对应key值
127.0.0.1:6379> get s1
"a"
setnx
# setnx仅当key值不存在时才能设置指定value,key存在则返回0,没有任何操作
127.0.0.1:6379> setnx s1 b
(integer) 0
127.0.0.1:6379> get s1
"a"
127.0.0.1:6379> set s2 b
OK
127.0.0.1:6379> get s2
"b"
setex
# setex设置value并设置过期时间。用法: setex key 存活时间 value,
127.0.0.1:6379> setex s1 20 b
OK
127.0.0.1:6379> ttl s1
(integer) 16
127.0.0.1:6379> get s1
"b"
127.0.0.1:6379> ttl s1
(integer) -2
127.0.0.1:6379> get s1
(nil)
mset、mget
# mset同时设置多个键值对,mget获取多个键值
127.0.0.1:6379> mset s1 a s2 b s3 c
OK
127.0.0.1:6379> mget s1 s2 s3
1) "a"
2) "b"
3) "c"
append
# append 字符串拼接
127.0.0.1:6379> get s1
"a"
127.0.0.1:6379> append s1 bc
(integer) 3
127.0.0.1:6379> get s1
"abc"
setrange
# setrange替换指定下标的值
127.0.0.1:6379> get s1
"abc"
127.0.0.1:6379> setrange s1 1 5
(integer) 3
127.0.0.1:6379> get s1
"a5c"
strlen
# strlen 返回value长度
127.0.0.1:6379> strlen s1
(integer) 3
incr、incrby、decr、decrby
# incr和incrby计数功能,针对value为数字,非数字将报错
#incr自增1,incrby增加指定数
127.0.0.1:6379> incr s1
(error) ERR value is not an integer or out of range
127.0.0.1:6379> set s4 10
OK
127.0.0.1:6379> incr s4
(integer) 11
127.0.0.1:6379> incrby s4 9
(integer) 20
127.0.0.1:6379> get s4
"20"
#decr自减1,decrby减少指定值
127.0.0.1:6379> decr s4
(integer) 19
127.0.0.1:6379> decrby s4 5
(integer) 14
127.0.0.1:6379> get s4
"14"
## getrange
# getrange范围取值
127.0.0.1:6379> get s5
"0123456"
127.0.0.1:6379> getrange s5 0 4
"01234"
127.0.0.1:6379> getrange s5 2 4
"234"
Redis之Hash
hset、hmset、hget、hmget、hgetall
# hset 添加,存在则更新,不存在则新增,用法:hset key field value
127.0.0.1:6379> hset user name zs
(integer) 1
# hmset批量新增字段和值
127.0.0.1:6379> hmset user age 10 gender 1
OK
# hget获取指定key对应的field的值
127.0.0.1:6379> hget user name
"zs"
# hmget批量获取
127.0.0.1:6379> hmget user name age gender
1) "zs"
2) "10"
3) "1"
# 获取所有key的字段和对应的value
127.0.0.1:6379> hgetall user
1) "name"
2) "zs"
3) "age"
4) "10"
5) "gender"
6) "1"
hkets、hvals
# hkeys获取key中所有字段,hvals获取key中所有字段对应的值
127.0.0.1:6379> hkeys user
1) "name"
2) "age"
3) "gender"
127.0.0.1:6379> hvals user
1) "zs"
2) "10"
3) "1"
hexists
# hexists判断某key对应的field是否存在,存在返回1,不存在返回0
127.0.0.1:6379> hexists user name
(integer) 1
127.0.0.1:6379> hexists user salary
(integer) 0
hsetnx
# hsetnx中key对应的field存在则不增加,不存在则增加
127.0.0.1:6379> hsetnx user name ls
(integer) 0
127.0.0.1:6379> hsetnx user hobby ball
(integer) 1
# hlen 返回key中field个数
127.0.0.1:6379> hlen user
(integer) 5
hincrby、hincrbyfloat
# hincrby 设置指定数,针对field为数字类型
127.0.0.1:6379> hincrby user name 10
(error) ERR hash value is not an integer
127.0.0.1:6379> hincrby user age 10
(integer) 43
127.0.0.1:6379> hget user age
"43"
# hincrbyfloat设置浮点数
127.0.0.1:6379> hincrbyfloat user score 10.5
"110.5"
127.0.0.1:6379> hget user score
"110.5"
hdel
# hdel删除key指定的field
127.0.0.1:6379> hkeys user
1) "name"
2) "age"
3) "gender"
4) "hobby"
5) "score"
127.0.0.1:6379> hdel user score
(integer) 1
127.0.0.1:6379> hkeys user
1) "name"
2) "age"
3) "gender"
4) "hobby"
Redis之List
lpush、rpush、lrange
# lpush向左添加,往下标为0插入
127.0.0.1:6379> lpush l1 a b c
(integer) 3
#lrange根据索引获取指定范围内的值
127.0.0.1:6379> lrange l1 0 -1
1) "c"
2) "b"
3) "a"
#rpush 尾插
127.0.0.1:6379> rpush l2 a b c
(integer) 3
127.0.0.1:6379> lrange l2 0 -1
1) "a"
2) "b"
3) "c"
lpushx
# lpushx key存在则添加
127.0.0.1:6379> lpushx l2 d
(integer) 4
127.0.0.1:6379> lpushx l2 a
(integer) 5
127.0.0.1:6379> lrange l2 0 -1
1) "a"
2) "d"
3) "a"
4) "b"
5) "c"
#key不存在则什么也不做
127.0.0.1:6379> lrange l1 0 -1
(empty list or set)
127.0.0.1:6379> lpushx l1 a
(integer) 0
lindex
#lrange根据索引范围取值,lindex根据索引取单个值,索引从0开始
127.0.0.1:6379> lrange l2 0 -1
1) "a"
2) "d"
3) "a"
4) "b"
5) "c"
127.0.0.1:6379> lindex l2 2
"a"
lpop、rpop
# lpop删除头部,rpop删除尾部
127.0.0.1:6379> lrange l2 0 -1
1) "a"
2) "d"
3) "a"
4) "b"
5) "c"
127.0.0.1:6379> lpop l2
"a"
127.0.0.1:6379> rpop l2
"c"
127.0.0.1:6379> lrange l2 0 -1
1) "d"
2) "a"
3) "b"
rpoplpush
# rpoplpush 列表1 列表2 将l1的尾部元素删除并插入到l2头部
127.0.0.1:6379> lrange l1 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> lrange l2 0 -1
1) "e"
2) "f"
3) "g"
127.0.0.1:6379> rpoplpush l1 l2
"d"
127.0.0.1:6379> lrange l1 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> lrange l2 0 -1
1) "d"
2) "e"
3) "f"
4) "g"
linsert
#linsert 列表名 after/before pivot value
#将value插入到pivot的后面/前面
127.0.0.1:6379> lrange l2 0 -1
1) "d"
2) "e"
3) "f"
4) "g"
127.0.0.1:6379> linsert l2 before e c
(integer) 5
127.0.0.1:6379> linsert l2 after d b
(integer) 6
127.0.0.1:6379> lrange l2 0 -1
1) "d"
2) "b"
3) "c"
4) "e"
5) "f"
6) "g"
lset
#lset根据索引插入
127.0.0.1:6379> lset l2 0 z
OK
127.0.0.1:6379> lrange l2 0 -1
1) "z"
2) "b"
3) "c"
4) "e"
5) "f"
6) "g"
lrem
#lrem key count value,删除指定的值几个
127.0.0.1:6379> lrange l1 0 -1
1) "a"
2) "b"
3) "c"
4) "a"
5) "d"
6) "c"
127.0.0.1:6379> lrem l1 1 a
(integer) 1
127.0.0.1:6379> lrem l1 2 c
(integer) 2
127.0.0.1:6379> lrange l1 0 -1
1) "b"
2) "a"
3) "d"
Redis之Set
sadd smembers srandmember sismember
# sadd批量添加,有去重功能,保留后插入的那一个
127.0.0.1:6379> sadd s1 a b c a d
(integer) 4
# 返回指定key的所有值
127.0.0.1:6379> smembers s1
1) "b"
2) "d"
3) "a"
4) "c"
# 随机返回指定个数的值
127.0.0.1:6379> srandmember s1 2
1) "b"
2) "d"
# 判断某个在不在集合内
127.0.0.1:6379> sismember s1 a
(integer) 1
127.0.0.1:6379> sismember s1 ff
(integer) 0
scard
# 返回集合内个数
127.0.0.1:6379> scard s1
(integer) 4
sinter sunion sdifff
127.0.0.1:6379> smembers s1
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> smembers s3
1) "b"
2) "d"
3) "c"
# sinter 求两个集合的交集
127.0.0.1:6379> sinter s1 s3
1) "b"
2) "c"
# sunion 求两个集合的并集
127.0.0.1:6379> sunion s1 s3
1) "b"
2) "d"
3) "a"
4) "c"
# 求两个集合的差集
127.0.0.1:6379> sdiff s1 s3
1) "a"
sinterstore suionstore sdiffstore
# sinterstore 将s1和s3的交集保存s2
127.0.0.1:6379> sinterstore s2 s1 s3
(integer) 2
127.0.0.1:6379> smembers s2
1) "b"
2) "c"
# sunionstore 将s1和s3的并集保存s2
127.0.0.1:6379> sunionstore s2 s1 s3
(integer) 4
127.0.0.1:6379> smembers s2
1) "b"
2) "d"
3) "a"
4) "c"
# sdiffstore 将s1和s3的差集保存s2
127.0.0.1:6379> sdiffstore s2 s1 s3
(integer) 1
127.0.0.1:6379> smembers s2
1) "a"
spop srem smove
127.0.0.1:6379> smembers s1
1) "b"
2) "a"
3) "c"
# spop 随机删除指定个数的值
127.0.0.1:6379> spop s1 2
1) "c"
2) "b"
127.0.0.1:6379> smembers s1
1) "a"
# srem删除集合内指定的值
127.0.0.1:6379> srem s1 a
(integer) 1
127.0.0.1:6379> smembers s1
(empty list or set)
127.0.0.1:6379> smembers s2
1) "a"
# smove 将集合s2 中指定的值移到s1,s2将删除此值
127.0.0.1:6379> smove s2 s1 a
(integer) 1
127.0.0.1:6379> smembers s1
1) "a"
127.0.0.1:6379> smembers s2
(empty list or set)
Redis之zset
zadd zrange
# 批量添加,zadd key score member
127.0.0.1:6379> zadd z1 60 a 70 b 50 c 80 d 65 e
(integer) 5
# zrange范围查询,按照score递增排列
127.0.0.1:6379> zrange z1 0 -1
1) "c"
2) "a"
3) "e"
4) "b"
5) "d"
#withscores 显示出成员及其分数score
127.0.0.1:6379> zrange z1 0 -1 withscores
1) "c"
2) "50"
3) "a"
4) "60"
5) "e"
6) "65"
7) "b"
8) "70"
9) "d"
10) "80"
zcard zrank
# zcard 返回key中成员个数
127.0.0.1:6379> zcard z1
(integer) 5
#zcount key min max; 返回score为min - max 中的成员个数
127.0.0.1:6379> zcount z1 60 100
(integer) 4
# zrank 获取某个成员的排名
127.0.0.1:6379> zrank z1 b
(integer) 3
zrangebyscore
#zrangebyscore key min max limit start num withscores
# 按照score区间以及limit限制递增输出
127.0.0.1:6379> zrangebyscore z1 60 100 limit 0 3 withscores
1) "a"
2) "60"
3) "e"
4) "65"
5) "b"
6) "70"
zrevrange zrevrangebyscore zrevrank
# zrevrange按照分数递减排列,和zrange相反
127.0.0.1:6379> zrevrange z1 0 -1 withscores
1) "d"
2) "80"
3) "b"
4) "70"
5) "e"
6) "65"
7) "a"
8) "60"
9) "c"
10) "50"
#zrevrangebyscore key max min limit start num withscores
# zrevrangebyscore按照score区间以及个数限制递减排列输出
127.0.0.1:6379> zrevrangebyscore z1 100 60 limit 0 3 withscores
1) "d"
2) "80"
3) "b"
4) "70"
5) "e"
6) "65"
# zrevrank按score值递增排列的排名
127.0.0.1:6379> zrevrank z1 d
(integer) 0
zrem
# zrem 移除一个或几个成员,返回移除的个数,成员不存在则返回0
127.0.0.1:6379> zrange z1 0 -1 withscores
1) "a"
2) "60"
3) "e"
4) "65"
5) "c"
6) "70"
7) "d"
8) "80"
127.0.0.1:6379> zrem z1 a c
(integer) 2
127.0.0.1:6379> zrange z1 0 -1
1) "e"
2) "d"
127.0.0.1:6379> zrem z1 f
(integer) 0
zremrangebyscore
# zremrangebyscore移除指定score区间的member
127.0.0.1:6379> zrange z1 0 -1 withscores
1) "e"
2) "65"
3) "c"
4) "75"
5) "d"
6) "80"
7) "a"
8) "90"
9) "f"
10) "92"
127.0.0.1:6379> zremrangebyscore z1 60 80
(integer) 3
127.0.0.1:6379> zrange z1 0 -1 withscores
1) "a"
2) "90"
3) "f"
4) "92"
zremrangebyrank
# zremrangebyrank 移除下标区间内的member,(递增排序)
127.0.0.1:6379> zrange z1 0 -1 withscores
1) "c"
2) "75"
3) "b"
4) "80"
5) "d"
6) "85"
7) "a"
8) "90"
9) "f"
10) "92"
11) "e"
12) "96"
127.0.0.1:6379> zremrangebyrank z1 0 2
(integer) 3
127.0.0.1:6379> zrange z1 0 -1 withscores
1) "a"
2) "90"
3) "f"
4) "92"
5) "e"
6) "96"
zincrby
# zincrby key count member,score自增count
127.0.0.1:6379> zincrby z1 10 a
"100"
127.0.0.1:6379> zrange z1 0 -1
1) "f"
2) "e"
3) "a"
Python操作Redis
python调用redis方法,与上面的redis命令、参数基本对应
import redis
# host默认为localhost,port默认为6379,db默认为0,decode_response默认为False,是否解码为字符串,默认返回bytes类型
redis_conn=redis.StrictRedis(host='localhost',port=6379,db=0,decode_responses=True)
String
redis_conn.set("s1","a")
print(redis_conn.get("s1"))
redis_conn.expire("s1",20)
redis_conn.persist("s1")
print(redis_conn.ttl("s1"))
# 批量设置的时候,参数类型为字典类型
redis_conn.mset({"s1":"a","s2":"b","s3":"c"})
print(redis_conn.mget("s1","s2","s3"))
print(redis_conn.exists("s1"))
print(redis_conn.strlen("s1"))
redis_conn.append("s1","bcd")
print(redis_conn.get("s1"))
redis_conn.set("s4",10)
redis_conn.incr("s4",10)
redis_conn.incrby("s4",20)
# 范围查询
print(redis_conn.getrange("s1",0,-1))
Hash
redis_conn.hset("h1","name","张三")
# 批量插入,发出了一个警告,用hset() 代替
redis_conn.hmset("h1",{"age":10,"gender":"男"})
print(redis_conn.hget("h1","name"))
print(redis_conn.hmget("h1","name","age","gender"))
print(redis_conn.hgetall("l1"))
print(redis_conn.hkeys("l1"))
print(redis_conn.hvals("l1"))
print(redis_conn.hexists("l1","name"))
redis_conn.hdel("l1","name")
List
redis_conn.lpush("l1",0,1,2)
print(redis_conn.lrange("l1",0, -1))
redis_conn.rpush("l2","a","b","c")
print(redis_conn.lrange("l2",0,-1))
# 按照索引插入
redis_conn.lset("l2",0,"d")
print(redis_conn.lrange("l2",0,-1))
redis_conn.lpop("l2")
redis_conn.rpop("l2")
print(redis_conn.lrange("l2",0,-1))
# 在某个元素前面或后面插入某值
redis_conn.linsert("l2","after","b","a")
redis_conn.linsert("l2","before","a","c")
print(redis_conn.lrange("l2",0,-1))
# 索引取值
print(redis_conn.lindex("l2",0))
Set
redis_conn.sadd("s1","a",1,2,"b")
print(redis_conn.smembers("s1"))
print(redis_conn.scard("s1"))
print(redis_conn.srandmember("s1",2))
redis_conn.sadd("s2","a",1,3,4)
# 求交并差集
print(redis_conn.sinter("s1","s2"))
print(redis_conn.sunion("s1","s2"))
print(redis_conn.sdiff("s1","s2"))
print(redis_conn.sinterstore("s3","s1","s2"))
# 将s3值移动到s1
redis_conn.smove("s1","s3",2)
Zset
redis_conn.zadd("z1",{"a1":40,"a2":35,"a3":50,"a4":70})
# 递增输出
print(redis_conn.zrange("z1",0,-1))
print(redis_conn.zrange("z1",0,-1,withscores=True))
# 根据分数区间以及个数限制递增输出
#zrangebyscore key min max start num
print(redis_conn.zrangebyscore("z1",40,60,0,2,withscores=True))
# 递减输出
print(redis_conn.zrevrange("z1",0,-1))
#根据分数区间以及个数限制递减输出
# zrevrangebyscore max min start num
print(redis_conn.zrevrangebyscore("z1",60,40,0,2,withscores=True))
# 删除指定的成员
redis_conn.zrem("z1","a2")
# 根据score区间删除成员
redis_conn.zremrangebyscore("z1",30,40)
# 根据下标区间删除成员
redis_conn.zremrangebyrank("z1",0,1)
更多推荐
已为社区贡献1条内容
所有评论(0)