关于常用nosql数据库介绍及redis安装配置的介绍,点击python访问redis查看。
前面介绍了redis
常用的数据类型,包括String
、List
、Hash
、Set
和Sorted Set
。下面针对不同数据类型的操作进行介绍。
String
- set(name, value)
设置值,默认不存在则创建,存在则修改 get(name)
获取值1
2
3
4
5
6
7import redis
pool = redis.ConnectionPool(host="118.24.18.158", port=6379)
r = redis.Redis(connection_pool=pool)
r.set("db", "oracle")
print(r.get("db")) #输出结果:b'oracle'
print(r.get("db").decode()) #输出结果:oraclemset(args, *kwargs)
批量设置值,传入参数为类型为dict
- mget(keys, *args)
批量获取key的值,传入参数类型为tuple
1
2r.mset(db1="oracle", db2="mysql", db3="redis")
print(r.mget("db1", "db2", "db3")) #输出结果:[b'oracle', b'mysql', b'redis']
或者使用下面传递参数1
2r.mset({"db1": "oracle", "db2": "mysql", "db3": "redis"})
print(r.mget(["db1", "db2", "db3"])) #输出结果:[b'oracle', b'mysql', b'redis']
- append(key, value)
在key对应的value后面追加内容1
2
3
4
5r.set("db", "oracle")
print(r.get("db")) #输出结果:b'oracle'
r.append("db", " and ")
r.append("db", "mysql")
print(r.get("db")) #输出结果:b'oracle and mysql'
List
在redis中,list类型的存储按照一个name对应一个list来存储。
- lpush(name, *values)
左边添加1
2
3
4r.lpush("db", "oracle")
r.lpush("db", "mysql")
r.lpush("db", "redis")
print(r.lrange("db", 0, -1)) #输出结果:[b'redis', b'mysql', b'oracle']
或者可以如下1
2r.lpush("db", "oracle", "mysql", "redis")
print(r.lrange("db", 0, -1)) #输出结果:[b'redis', b'mysql', b'oracle']
rpush(name, *values)
右边添加1
2
3
4r.rpush("db", "oracle")
r.rpush("db", "mysql")
r.rpush("db", "redis")
print(r.lrange("db", 0, -1)) #输出结果:[b'oracle', b'mysql', b'redis']linsert(name, where, refvalue, value)
根据where参数,在列表name的值refvalue前面或者后面插入值value,成功则返回值为新的列表的长度,否则返回-1。
where取值为before或者after。1
2
3
4
5
6r.lpush("db", "oracle")
print(r.lrange("db", 0, -1)) #输出结果:[b'oracle']
r.linsert("db", "after", "oracle", "mysql")
print(r.lrange("db", 0, -1)) #输出结果:[b'oracle', b'mysql']
r.linsert("db", "before", "mysql", "redis")
print(r.lrange("db", 0, -1)) #输出结果:[b'oracle', b'redis', b'mysql']lpop(name)
删除列表name中的第一个元素,返回值为删除的元素1
2
3
4r.lpush("db", "oracle", "mysql", "redis")
print(r.lrange("db", 0, -1)) #输出结果:[b'redis', b'mysql', b'oracle']
print(r.lpop("db")) #输出结果:b'redis'
print(r.lrange("db", 0, -1)) #输出结果:[b'mysql', b'oracle']lrange(name, start, end)
通过分片返回list位于start和end范围的值1
2
3
4
5r.lpush("db", "oracle")
r.lpush("db", "mysql")
r.lpush("db", "redis")
print(r.lrange("db", 0, 2)) #输出结果:[b'redis', b'mysql', b'oracle']
print(r.lrange("db",0, 1)) #输出结果:[b'redis', b'mysql']lset(name, index, value)
修改list中指定位置的值1
2
3
4r.lpush("db", "oracle", "mysql", "redis")
print(r.lrange("db", 0, -1)) #输出结果:[b'redis', b'mysql', b'oracle']
r.lset("db", 1, "nosql")
print(r.lrange("db", 0, -1)) #输出结果:[b'redis', b'nosql', b'oracle']lrem(name, value, num)
删除列表name中最先出现的num个值为value的元素。num
默认值为0,表示删除全部值为value的元素;num>0
表示删除值为value的元素时从头到尾匹配;num>0
表示删除值为value的元素时从尾到头匹配。1
2
3
4
5
6
7
8
9
10
11
12r.lpush("db", "oracle", "mysql", "redis", "redis")
print(r.lrange("db", 0, -1)) #输出结果:[b'redis', b'redis', b'mysql', b'oracle']
r.lrem("db", "redis")
print(r.lrange("db", 0, -1)) #输出结果:[b'mysql', b'oracle']
r.lpush("db1", "oracle", "redis", "mysql", "redis", "redis")
print(r.lrange("db1", 0, -1)) #输出结果:[b'redis', b'redis', b'mysql', b'redis', b'oracle']
r.lrem("db1", "redis", 1)
print(r.lrange("db1", 0, -1)) #输出结果:[b'redis', b'mysql', b'redis', b'oracle']
r.lpush("db2", "oracle", "redis", "mysql", "redis", "redis")
print(r.lrange("db2", 0, -1)) #输出结果:[b'redis', b'redis', b'mysql', b'redis', b'oracle']
r.lrem("db2", "redis", -2)
print(r.lrange("db2", 0, -1)) #输出结果:[b'redis', b'mysql', b'oracle']
Set
Set集合就是不允许重复元素的列表。
- sadd(name, *values)
集合name中添加值。 - scard(name)
返回集合name中元素的数量。 smembers(name)
返回集合的所有成员。1
2
3r.sadd("dbset", "oracle", "mysql", "redis")
print(r.scard("dbset")) #输出结果:3
print(r.smembers("dbset")) #输出结果:{b'mysql', b'redis', b'oracle'}spop(name)
随机删除并返回集合name中的一个元素。1
2
3
4r.sadd("dbset", "oracle", "mysql", "redis")
print(r.smembers("dbset")) #输出结果:{b'redis', b'oracle', b'mysql'}
print(r.spop("dbset")) #输出结果:b'mysql'
print(r.smembers("dbset")) #输出结果:{b'oracle', b'redis'}srem(name, *values)
从集合name中删除指定的值。1
2
3
4r.sadd("dbset", "oracle", "mysql", "redis")
print(r.smembers("dbset")) #输出结果:{b'oracle', b'redis', b'mysql'}
r.srem("dbset", "mysql", "redis")
print(r.smembers("dbset")) #输出结果:{b'oracle'}sunion(keys, *args)
返回多个集合的并集1
2
3
4r.sadd("set1", "1", "2", "3")
r.sadd("set2", "2", "3", "4")
r.sadd("set3", "3", "4", "5")
print(r.sunion("set1", "set2", "set3")) #输出结果:{b'5', b'2', b'3', b'1', b'4'}sinter()
返回多个集合的交集1
2
3
4r.sadd("set1", "1", "2", "3")
r.sadd("set2", "2", "3", "4")
r.sadd("set3", "3", "4", "5")
print(r.sinter("set1", "set2", "set3")) #输出结果:{b'3'}
Zset
Zset也就是sorted Set,有序集合。在集合的基础上元素的排序根据另外一个值进行比较。所以有序集合每个元素有2个值,即值和分数,分数专门用来做排序。
zadd(name, args, *kwargs)
集合添加元素,下面两种写法是等价的。1
2r.zadd("dbset", "oracle", 1, "redis", 3, "mysql", 2)
r.zadd("dbset", oracle=1, redis=3, mysql=2)zcard(name)
有序集合中名称为name的元素个数。zrange(name, start, end)
返回有序集合name中位于start和end之间的元素,默认为升序排列。1
2
3r.zadd("dbset", "oracle", 1, "redis", 3, "mysql", 2)
print(r.zrange("dbset", 0, -1)) #输出结果:[b'oracle', b'mysql', b'redis']
print(r.zcard("dbset")) #输出结果:3zrem(name, *values)
删除有序集合name中的值。1
2
3r.zadd("dbset", oracle=1, redis=3, mysql=2)
r.zrem("dbset", "oracle")
print(r.zrange("dbset", 0, -1)) #输出结果:[b'mysql', b'redis']
Hash
redis中的Hash在内存中类似于一个name对应一个dict来存储。
- hset(name, key, value)
名称为name的hash中,将key的值设置为value。
若成功添加则返回1,否则返回0. hget(name, key)
在名称的name的hash中,返回key的对应值。1
2r.hset("dbhash", "db1", "oracle")
print(r.hget("dbhash", "db1")) #输出结果:b'oracle'hmset(name, mapping)
名称为name的hash中,根据mapping字典内容添加对应的key和value。hmget(name, keys, *args)
名称为name的hash中获取多个keys的值。1
2r.hmset("dbhash", {"db1": "oracle", "db2": "mysql"})
print(r.hmget("dbhash", "db1", "db2")) #输出结果:[b'oracle', b'mysql']hkeys(name)
列表形式返回名称为name的hash中的keys。1
2r.hmset("dbhash", {"db1": "oracle", "db2": "mysql"})
print(r.hkeys("dbhash")) #输出结果:[b'db1', b'db2']hvals()
列表形式返回名称为name的hash中的values。1
2r.hmset("dbhash", {"db1": "oracle", "db2": "mysql"})
print(r.hvals("dbhash")) #输出结果:[b'oracle', b'mysql']hexists(name, key)
名称为name的hash中是否存在key。返回值为布尔值。1
2
3r.hmset("dbhash", {"db1": "oracle", "db2": "mysql"})
print(r.hexists("dbhash", "db1")) #输出结果:True
print(r.hexists("dbhash", "db3")) #输出结果:Falsehdel(name, keys)
删除名称为name的hash中的keys。1
2
3r.hmset("dbhash", {"db1": "oracle", "db2": "mysql"})
print(r.hdel("dbhash", "db1")) #输出结果:1
print(r.hkeys("dbhash")) #输出结果:[b'db2']hlen(name)
返回名称为name的hash中元素的个数。1
2r.hmset("dbhash", {"db1": "oracle", "db2": "mysql"})
print(r.hlen("dbhash")) #输出结果:2
其它常用操作
下面的操作适用于上述所有类型
keys(pattern=’*’)
返回匹配pattern的key。1
2
3
4r.set("dbset", 1)
r.set("dbstr", 2)
r.set("int", 3)
print(r.keys(pattern='db*')) #输出结果:[b'dbstr', b'dbset']delete(names)
删除name指定的一个或多个keys。1
2
3
4
5r.set("dbset", 1)
r.set("dbstr", 2)
r.set("int", 3)
print(r.delete("dbset", "dbstr"))
print(r.keys())exists(name)
判断key为name是否存在。返回值为布尔值。1
2
3r.set("dbset", 1)
print(r.exists("dbset")) #输出结果:True
print(r.exists("dbstr")) #输出结果:Falserename(src, dst)
修改key的名称,修改成功返回True,否则返回错误。1
2
3r.set("dbset", 1)
print(r.rename("dbset", "db")) #输出结果:True
print(r.keys()) #输出结果:[b'db']expire(name, time)
设置key的过期时间。type()
返回key所存储值的类型。1
2
3
4r.set("dbset", 1)
print(r.type("dbset")) #输出结果:b'string'
r.zadd("dbset1", oracle=1, redis=3, mysql=2)
print(r.type("dbset1")) #输出结果:b'zset'move(name, db)
将key为name的元素迁移至db。1
2r.set("dbset", "dbstr")
print(r.move("dbset", 1)) #输出结果:Trueflushall()
删除所有的key。