Redis介绍
redis是key-value型的存储系统,他本身就是一个大字典,支持多种数据结构,包括String、List、Set、Zset和Hash。其数据都缓存在内存中,但是会定时将数据写入磁盘,可以做持久化。
一、redis的特点
1、数据存储在内存中,读取写入速度快
2、支持持久化,定时将数据写入磁盘。
3、支持五种数据类型,但是不支持嵌套。
4、支持事务,要么都执行要么都不执行。
二、redis操作和全局操作
连接redis:
1 #方式一:直接连接 2 import redis 3 conn = redis.Redis(host="127.0.0.1", port=6379, password=xxxx) # 默认是存储字节类型,可以通过decode_response=True把值自动转换成字符 4 5 6 #方式二:创建连接池 7 pool = redis.ConnectionPool(host="127.0.0.1", port=6379, password=xxxx, max_connections=100) 8 conn = redis.Redis(connection_pool=pool)
全局操作:
conn.keys() #取到所有的键 #redis可以使用模糊匹配,*代表任意多个字符, ?代表一个字符, [k,m]代表匹配中括号内的字符 conn.delete("name") #删除一个键值 conn.flushall() #删除所有键值 conn.exists("name") #查看这个键是否存在 conn.rename(old, new) #重命名一个键 conn.randomkey() #随机获取一个键 scan_iter(name) #返回一个迭代器,防止值太多导致系统崩溃
事务:
1 pipe = conn.pipeline(transation=True) 2 pipe.multi() 3 xxxx 4 pipe.execute()
1、String操作
1 conn.set(k, v) #设置单个值 2 conn.get(k) #获取单个值 3 conn.mset({k1:v1, k2:v2}) #批量设置值 4 conn.mget(k1, k2) #批量获取值
2、List操作
1 conn.lpush(name, val) #向列表最左边存放数据 2 conn.rpush(name,val) # 向列表最右边存放数据 3 conn.lpop(name) #取出最左边的值 4 conn.rpop(name) #取出最右边的值 5 6 conn.lrange(name, start, end) #取出列表一定范围内的值 7 conn.lindex(name, index) #取出该索引位置的值 8 conn.llen(name) #查看列表长度 9 10 #自定义增量迭代 11 #如果想取出列表中的所有值,需要自定义一个函数,一个值一个值取,防止程序崩溃。 12 def get_list(name) 13 length = conn.llen(name) 14 for index in range(length): 15 yield conn.lindex(name, index) 16 17 for i in get_list("xxx"): 18 print(i)
3、Hash操作
1 conn.hset(name, key, val) #设置值 2 conn.hget(name, key) #取值 3 conn.hmset(name, {k1:v1, k2:v2}) #批量设置值 4 #conn.hmget(name, k1, k2) 5 conn.hmget(name, [k1, k2]) #批量获取值 6 conn.hgetall(name) #获取所有键值 7 8 conn.hlen(name) #获取键值对个数 9 conn.hkeys(name) #获取所有的键 10 conn.hvals(name) #获取所有的值 11 conn.hexists(name, key) #检查是否存在对应的键 12 conn.hdel(name, key) #删除 13 14 conn.hscan_iter(name) #批量获取键值 15 #for k,v in conn.hscan_iter(name): 16 # print(k, v)
4、Set操作(集合可以用来去重)
1 conn.sadd(name, val) #给集合添加元素 2 conn.spop(name) #从集合右侧取出并删除一个值 3 conn.smembers(name) #获取name对应集合的所有元素 4 conn.sismember(name, val) #检验是否是该集合的值 5 6 conn.sscan_iter()
5、Sorted Set(有序集合)
1 conn.zadd(name,k1=1,k2=2) #添加值和优先级