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)
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐