一、什么是redis
同mysql一样是一个key-value数据库,多用于celery分布式的存贮任务和结果,有以下有点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis支持数据的备份,即master-slave模式的数据备份。(数据库的读写分离)
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
二、连接redis数据库
进入redis目录文件下,在导航栏输入'cmd'进入命令行模式
redis-server.exe redis.windows.conf
启动本地redis服务
再开启一个命令行,本地连接
redis-cli --raw #本地连接
redis-cli -h host -p port -a password #远程连接
三、redis基本指令
(只列出本人常用命令,其他命令请查询官方文档)
1、键操作
Redis 键命令用于管理 redis 的键。
127.0.0.1:6379> set keyyy redis #新建key
OK
127.0.0.1:6379> keys * #查询所有key
keyyy
127.0.0.1:6379> keys keyyy #查询指定key
keyyy
127.0.0.1:6379> del keyyy #删除指定key
1
127.0.0.1:6379> keys *
1)Redis不支持自定义数据库名
2)Redis不支持为每个数据库设置密码
3)Redis的多个数据库之间不是完全隔离的,FLUSHALL命令会清空所有数据库的数据
a)FLUSHALL – 清空所有数据库的所有数据
b)FLUSHDB – 清空当前所在数据库的数据
redis默认同时存在16个数据库(0-15),可在配置文件中的databases中修改。当我们连接Redis服务时,默认操作的是0号数据库,可以通过SELECT命令更换数据库:
127.0.0.1:6379> select 1
OK
2、字符串操作
对数据类型为字符串的数据进行操作
127.0.0.1:6379> set keyyy hahaha #为指定key赋值,如果没有key则自动创建
OK
127.0.0.1:6379> get keyyy #获取目标key的值
hahaha
127.0.0.1:6379> getset keyyy hahaha2 #将给定key的值设为value,并返回 key的旧值
hahaha
127.0.0.1:6379> STRLEN keyyy #返回key所储存的字符串值的长度。
7
127.0.0.1:6379> msetnx key4 key444 key5 key555 #同时设置多个key-value对,key不能存在
1
127.0.0.1:6379> get key4
key444
127.0.0.1:6379> get key5
key555
3、hash操作
Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
设置一些描述信息(name,age,gender)到哈希表的person键中
127.0.0.1:6379> hmset person name "laowang" age 20 gender "man" # hmset key名 字段名 "值"
OK
127.0.0.1:6379> hgetall person #显示目标字段的所有值
name
laowang
age
20
gender
man
127.0.0.1:6379> hdel person name gender #删除 name 和 gender 字段
2
127.0.0.1:6379> hgetall person
age
20
127.0.0.1:6379> hset person age 21 #将哈希表key中的字段field的值设为value 。
0
127.0.0.1:6379> hgetall person
age
21
4、list操作
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
127.0.0.1:6379> LPUSH list1 haha #从左边给list1插入数据(可多个插入)
1
127.0.0.1:6379> RPUSH list1 hehehe #从右边给list1插入数据(可多个插入)
2
127.0.0.1:6379> RPUSH list1 HOHOHO
3
127.0.0.1:6379> LRANGE list1 0 100 #获取列表指定范围内的元素
haha
hehehe
HOHOHO
127.0.0.1:6379> LINDEX list1 2 #获取目标索引位置的值
HOHOHO
127.0.0.1:6379> LINSERT list1 BEFORE HOHOHO NONONO #在目标元素前插入
4
127.0.0.1:6379> LINSERT list1 AFTER HOHOHO yeyeye #在目标元素后插入
5
127.0.0.1:6379> LRANGE list1 0 100
haha
hehehe
NONONO
HOHOHO
yeyeye
127.0.0.1:6379> LLEN list1 #获取列表长度
6
127.0.0.1:6379> LPOP list1 #移出并获取列表的第一个元素
haha
127.0.0.1:6379> RPOP list1 #移出并获取列表的最后一个元素
yeyeye
127.0.0.1:6379> LREM list1 1 hehehe
#根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素--->删除值为hehehe的元素,删一个。
#count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
#count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
#count = 0 : 移除表中所有与 VALUE 相等的值。
1
127.0.0.1:6379> LRANGE list1 0 100
NONONO
yeyeye
HOHOHO
yeyeye
127.0.0.1:6379> LSET list1 1 POPOPO #通过索引设置列表元素的值
OK
127.0.0.1:6379> LRANGE list1 0 100
NONONO
POPOPO
HOHOHO
5、无序集合
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
127.0.0.1:6379> SADD setkey HAHAHA # 向setkey集合插入的一个元素。
1
127.0.0.1:6379> SADD setkey HOHOHO NONONO\ # 向setkey集合插入的两个元素。
2
127.0.0.1:6379> SADD setkey HAHAHA #向setkey集合插入的一个重复的元素。插入失败
0
127.0.0.1:6379> SCARD setkey #获取集合的成员数
3
127.0.0.1:6379> SMEMBERS setkey #返回集合中的所有成员
HOHOHO
HAHAHA
NONONO\
127.0.0.1:6379> SPOP setkey #移除并返回集合中的一个随机元素,因为集合是无序的
NONONO\
127.0.0.1:6379> SISMEMBER setkey YEYEYE #判断元素是否是集合的成员
0
127.0.0.1:6379> SISMEMBER setkey HAHAHA
1
127.0.0.1:6379> SRANDMEMBER setkey 1 #返回集合中一个随机数
HOHOHO
127.0.0.1:6379> SRANDMEMBER setkey 2 #返回集合中两个随机数
HAHAHA
HOHOHO
127.0.0.1:6379> SDIFF setkey setkey2 #返回第一个集合与其他集合之间的差异。
HOHOHO
127.0.0.1:6379> SINTER setkey setkey2 #返回给定所有集合的交集
HAHAHA
127.0.0.1:6379> SUNION setkey setkey2 #返回所有给定集合的并集
PAPAPA
HAHAHA
HOHOHO
6、Redis 有序集合(sorted set)
Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
127.0.0.1:6379> ZADD ss1 1 laowang #插入数据并关联上分数
1
127.0.0.1:6379> ZADD ss1 1.1 laoliu
1
127.0.0.1:6379> ZADD ss1 2.0 laogao
1
127.0.0.1:6379> ZADD ss1 2.0 laogao
0
127.0.0.1:6379> ZRANGE ss1 0 10 WITHSCORES #通过索引区间返回有序集合指定区间内的成员和分数(可不带分数)
laowang
1
laoliu
1.1000000000000001
laogao
2