58网站怎么样做效果会更好,wap网站定位,小米开发者模式怎么关闭,企通互联的网站建设失败一、简介 Redis 与其他 key - value 缓存产品有以下三个特点#xff1a; Redis支持数据的持久化#xff0c;可以将内存中的数据保存在磁盘中#xff0c;重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据#xff0c;同时还提供list#xff0c;…一、简介 Redis 与其他 key - value 缓存产品有以下三个特点 Redis支持数据的持久化可以将内存中的数据保存在磁盘中重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据同时还提供listsetzsethash等数据结构的存储。
Redis支持数据的备份即master-slave模式的数据备份。
二、数据类型
Redis支持五种数据类型string字符串hash哈希list列表set集合及zset(sorted set有序集合)。 string字符串
string 是 redis 最基本的类型你可以理解成与 Memcached 一模一样的类型一个 key 对应一个 value。 string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。 string 类型是 Redis 最基本的数据类型string 类型的值最大能存储 512MB。 hash哈希
Redis hash 是一个键值(keyvalue)对集合。 Redis hash 是一个 string 类型的 field 和 value 的映射表hash 特别适合用于存储对象。 list列表
Redis 列表是简单的字符串列表按照插入顺序排序。你可以添加一个元素到列表的头部左边或者尾部右边。列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。 Set集合
Redis 的 Set 是 string 类型的无序集合。 集合是通过哈希表实现的所以添加删除查找的复杂度都是 O(1)。 zset(sorted set有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。 zset的成员是唯一的,但分数(score)却可以重复。 三、事务
Redis 事务可以一次执行多个命令 并且带有以下三个重要的保证 批量操作在发送 EXEC 命令前被放入队列缓存。
收到 EXEC 命令后进入事务执行事务中任意命令执行失败其余的命令依然被执行。
在事务执行过程其他客户端提交的命令请求不会插入到事务执行命令序列中。
一个事务从开始到执行会经历以下三个阶段 开始事务。
命令入队。
执行事务。
单个 Redis 命令的执行是原子性的但 Redis 没有在事务上增加任何维持原子性的机制所以 Redis 事务的执行并不是原子性的。 事务可以理解为一个打包的批量执行脚本但批量指令并非原子化的操作中间某条指令的失败不会导致前面已做指令的回滚也不会造成后续的指令不做。 四、redis常用命令及基本用法
1、redis连接
import redis r redis.Redis(host127.0.0.1,port6379)
2、也可以使用连接池连接
import redis p redis.ConnectionPool(host127.0.0.1, port6379)
3、基本命令string
复制代码
import redis r redis.Redis(host127.0.0.1,port6379) #1、存储数据set(name, value, exNone, pxNone, nxFalse, xxFalse)
#ex过期时间秒
#px过期时间毫秒
#nx如果设置为True则只有name不存在时当前set操作才执行
#xx如果设置为True则只有name存在时当前set操作才执行
r.set(name,pt) #2、批量设置值mset(*args, **kwargs)
r.mset(k1v1, k2v2) #3.批量获取mget(keys, *args)
r.mget(k1,k2) #4.修改值getset(name, value),将k1的值换成v2
r.getset(k1,v2))
复制代码
4、基本命令hash
复制代码
import redis r redis.Redis(host127.0.0.1,port6379) #1、单个增加--修改(单个取出)--没有就新增有的话就修改
#hset(name, key, value)
#name对应的hash中设置一个键值对不存在则创建否则修改
#参数
#nameredis的name
#keyname对应的hash中的key
#valuename对应的hash中的value
r.hset(name_hash,k1,v1) #2、hsetnx(name, key, value)只能新建
r.hsetnx(name_hash,k1,v1) #3、批量增加取出
#hmset(name, mapping)
#在name对应的hash中批量设置键值对
#参数
#nameredis的name
#mapping字典如{k1:v1, k2: v2}
r.hmset(xx, {k1:v1, k2: v2}) #4、取出单个
#hget(name,key)
#在name对应的hash中获取根据key获取value
r.hget(name_hash,k2) #5、批量取出
#hmget(name, keys, *args)
#在name对应的hash中获取多个key的值
#参数
#namereids对应的name
#keys要获取key集合如[k1, k2, k3]
#*args要获取的key如k1,k2,k3
r.hmget(xx, k1, k2) #6、取出所有的键值对
#hgetall(name)
#获取name对应hash的所有键值
r.hgetall(name_hash) #7、删除键值对
#hdel(name,*keys)
#将name对应的hash中指定key的键值对删除
r.hdel(name_hash,k1) 删除一个键值对
复制代码
5、基本命令list
复制代码
import redis r redis.Redis(host127.0.0.1,port6379) #1、增加类似于list的append只是这里是从左边新增加--没有就新建
#lpush(name,values)
#在name对应的list中添加元素每个新的元素都添加到列表的最左边
r.lpush(oo, 11,22,33) #2、增加从右边增加--没有就新建
r.lpush(oo, 11,22,33) #3、新增固定索引号位置插入元素
linsert(name, where, refvalue, value))
#在name对应的列表的某一个值前或后插入一个新值
#参数
#nameredis的name
#whereBEFORE或AFTER
#refvalue标杆值即在它前后插入数据
#value要插入的数据
r.linsert(foo_list1,before,22,33) #4、修改
#lset(name, index, value)
#对name对应的list中的某一个索引位置重新赋值
#参数
#nameredis的name
#indexlist的索引位置
#value要设置的值
r.lset(name_list,4,20) #5、删除
#lrem(name, value, num)
#在name对应的list中删除指定的值
#参数
#nameredis的name
#value要删除的值
#num num0删除列表中所有的指定值
#num2,从前到后删除2个 num1,从前到后删除左边第1个
#num-2,从后向前删除2个
r.lrem(foo_list1,2,1) #6、取值根据索引号取值
lindex(name, index)
在name对应的列表中根据索引获取列表元素
r.lindex(name_list,0)
复制代码
6、基本命令set
复制代码
import redis r redis.Redis(host127.0.0.1,port6379) #1、新增
#sadd(name,values)
#name对应的集合中添加元素
r.sadd(set1,33,44,55,66) #2、 获取元素个数 类似于len
scard(name)
#获取name对应的集合中元素个数
r.scard(set1) #3、 获取集合中所有的成员
smembers(name)
#获取name对应的集合的所有成员
r.smembers(set1) #4、删除随机删除返回被删除值
#spop(name)
r.spop(set1) #5、指定删除
#srem(name, values)
r.srem(set1,66)
复制代码
7、基本命令有序集合
复制代码
import redis r redis.Redis(host127.0.0.1,port6379) #1、新增
#zadd(name, *args, **kwargs)
#在name对应的有序集合中添加元素
r.zadd(zz, n1, 1, n2, 2) #2、获取有序集合元素个数 类似于len
#zcard(name)
#获取name对应的有序集合元素的数量
r.zcard(zz) #3、获取name对应的有序集合中分数 在 [min,max] 之间的个数
#zcount(name, min, max)
r.zcount(zz,11,22) #4、删除--指定值删除
#zrem(name, values
r.zrem(zz, [s1, s2])
复制代码
8、其他常规操作
复制代码
#1 删除
delete(*names)
#根据删除redis中的任意数据类型string、hash、list、set、有序set #2、检查名字是否存在
#exists(name)
#检测redis的name是否存在
r.exists(ste1) True 存在就是True False 不存在就是False #3、模糊匹配
#keys(pattern*)
#根据模型获取redis的name
r.keys(patternss) #4、设置超时时间
#expire(name ,time)
#为某个redis的某个name设置超时时间
r.expire(name ,5) #5、 重命名
#rename(src, dst)
#对redis的name重命名为
r.rename(name2,name1) #6、获取类型
#type(name)
#获取name对应值的类型
r.type(set1) #7、查看所有元素
#scan(cursor0, matchNone, countNone)