redis简介
Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序。
Redis有三个主要特点,使它优越于其它键值数据存储系统
- Redis将其数据库完全保存在内存中,仅使用磁盘进行持久化。
- 与其它键值数据存储相比,Redis有一组相对丰富的数据类型。
- Redis可以将数据复制到任意数量的从机中。
Redis的优点
以下是Redis的一些优点。
- 异常快 - Redis非常快,每秒可执行大约
110000
次的设置(SET
)操作,每秒大约可执行81000
次的读取/获取(GET
)操作。 - 支持丰富的数据类型 - Redis支持开发人员常用的大多数数据类型,例如列表,集合,排序集和散列等等。这使得Redis很容易被用来解决各种问题,因为我们知道哪些问题可以更好使用地哪些数据类型来处理解决。
- 操作具有原子性 - 所有Redis操作都是原子操作,这确保如果两个客户端并发访问,Redis服务器能接收更新的值。
- 多实用工具 - Redis是一个多实用工具,可用于多种用例,如:缓存,消息队列(Redis本地支持发布/订阅),应用程序中的任何短期数据,例如,web应用程序中的会话,网页命中计数等。
安装
sudo apt install redis-server
查看是否启动
netstat -ant |grep 6379
配置文件
sudo vi /etc/redis/redis.conf
选择数据库 1
select 1
显示所有的键值
keys *
删除键值 del
del name
一、String
概述:String是redis最基本的类型,最大能存储512MB的数据,String类型是二进制安全的,即可以存储任何数据、比如数字、图片、序列化对象等
1、设置
a、设置键值
set key value
例如:
set name 'xiaoming'
b、设置键值及过期时间,以秒为单位
setex key seconds value
例如:
setex name 10 'xiaoming'
c、设置多个键值
mset key value [key value ……]
例如:
mset name "lili" age 18 sex 'girl'
2、获取
a、根据键获取值,如果键不存在则返回None(null 0 nil)
get key
get name
b、根据多个键获取多个值
mget key [key ……]
mget name age
3、运算
要求:值是字符串类型的数字
a、将key对应的值加1
incr key
例如:
incr score
b、将key对应的值减1
decr key
decr score
c、将key对应的值加整数
incrby key intnum
incrby score 10
d、将key对应的值减整数
decrby key intnum
decrby score 20
4、其它
a、追加值
append key value
append name "hello"
b、获取值长度
strlen key
strlen name
二、key
1、查找键,参数可以模糊匹配
keys pattern
2、判断键是否存在,如果存在返回1,不存在返回0
exists key
3、删除键及对应的值
del key [key ……]
4、对已经存在的键值设置过期时间,以秒为单位
expire key seconds
5、查看有效时间,以秒为单位
ttl key
三、hash
概述:hash用于存储对象
1、设置
a、设置单个值
#语法 key 是hash表的表名,field是字段名,
hset key field value
hset site google www.google.com
b、设置多个值
#语法
hmset key field value [field value ……]
hmset site jd jd.com 360 360.com
2、获取
a、获取一个属性的值
#语法
hget key field
hget site google
b、获取多个属性的值
#语法
hmget key filed [filed ……]
hmget site baidu jd
c、获取所有属性和值
#语法
hgetall key
hgetall site
d、获取所有属性
hkeys key
e、获取所有值
hvals key
f、返回包含数据的个数
hlen key
3、其它
a、判断属性是否存在,存在返回1,不存在返回0
hexists key field
b、删除属性及值
hdel key field [field ……]
四、list
概述:列表的元素类型为string,按照插入顺序排序,在列表的头部或尾部添加元素
1、设置
a、在头部插入
#key 为列表名
lpush key value [vlaue ……]
b、在尾部插入
rpush key value [vlaue ……]
c、在一个元素的前|后插入新元素
linsert key before|after aa value
d、设置指定索引的元素值
lset key index value
注意:index从0开始
注意:索引值可以是负数,表示偏移量是从list的尾部开始,如-1表示最后一个元素
2、获取
a、移除并返回key对应的list的第一个元素
lpop key
b、移除并返回key对应的list的最后一个元素
rpop key
c、返回存储在key的列表中的指定范围的元素
lrange key start end
注意:start end都是从0开始
注意:偏移量可以是负数
3、其它
a、裁剪列表,改为原集合的一个子集
ltrim key start end
注意:start end都是从0开始
注意:偏移量可以是负数
b、返回存储在key里的list的长度
llen key
c、返回列表中索引对应的值
lindex key index
五、set
概述:无序集合,元素类型为String类型,元素具有唯一性,不重复
1、设置
a、添加元素
sadd key member [member ……]
2、获取
a、返回key集合中所有元素
smembers key
b、返回集合元素个数
scard key
3、交集
a、求多个集合的交集 # intersect
sinter key [key ……]
b、求多个集合的差集 #difference
sdiff key [key ……]
c、求多个集合的合集
sunion key [key ……]
d、判断元素是否在集合中,存在返回1,不存在返回0
sismember key member
e, srem 删除集合中一个元素
srem key member
六、zset
概述:a、有序集合,元素类型为Sting,元素具有唯一性,不能重复
b、每个元素都会关联一个double类型的score(表示权重),通过权重的大小排序,元素的score可以相同
1、设置
a、添加
#语法
zadd key score member [score member ……]
#示例
zadd z1 1 a 5 b 3 c 2 d 4 e
2、获取
a、返回指定范围的元素 #withscores
zrange key start end
同时返回 分数
zrange key start end
b、返回元素个数
zcard key
c、返回有序集合key中,score在min和max之间的元素的个数
zcount key min max
d、返回有序集合key中,成员member的score值
zscore key member
七、与python交互
import redis
#连接
r = redis.Redis(host="localhost", port=6379)
#方法1:根据数据类型的不同,调用响应的方法
#写
#r.set("p1", "good")
#读
#print(r.get("p1"))
#方法2:pipeline
#缓冲多条命令,然后依次执行,减少服务器-客户端之间的TCP数据包
pipe = r.pipeline()
pipe.set("p2", "nice")
pipe.set("p3", "handsom")
pipe.set("p4", "cool")
pipe.execute()