1.Redis简介
- Redis是完全开源免费的,遵守RSD协议,是一个高性能的key-value数据库
2.Redis优势
- 性能极高-
- Redis能读的速度是11W次/秒,写的速度是8.1W次/秒
- 丰富的数据类型
- Redis支持二进制的字符串、列表、嘻哈值、集合和有序集合等数据类型操作。
- 原子性
- Redis的所有操作都是原子性的,也就是要么成功执行,要么失败完全不执行
- 单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来
- 丰富的特性
- Redis还支持 发布/订阅、通知、key过期等等特性
3. 数据类型
- 字符串 string
- 哈希值
- 列表
- 集合
- 有序集合
判断key的类型:
type key
3.1 字符串
- 字符串是最基本的类型,一个key对应一个value
- 字符串类型是二进制安全的。意思是redis的字符串可以包含任何数据。比如jpg图片或者序列化的对象。
- 字符串类型是Redis最基本的数据类型,一个键最大能存储512M
3.1.1 SET设置值
- 以下就设置了键name,和值yuhua。注意,键最大可以存储512M
SET name yuhua
3.1.2 GET获取值
GET name
3.1.3 获取子串
- 语法:GETRANGE key 起始位置,结束位置
GETRANGE name 1 2
//返回的结果就是
"uh"
3.1.4 递增、递减
- 语法:INCR/DECR 变量
- 假设设置age为1,然后递增成2
SET age 1
//递增1
INCR age
//返回
(integer) 2
//递减1
DECR age
//返回
(integer) 1
3.1.5 删除key(也就删除了value)
- 语法:DEL key
//删除age这个key,如果再获取就获取不到了
DEL age
3.1.6 判断key是否存在
- 语法:EXISTS key
- 返回值:0表示不存在,1表示存在
EXISTS age
//返回0 表示不存在
EXISTS name
//返回1 表示存在
3.1.7 给key设置过期时间
- 语法:EXPIRE 过期时间(S为单位)
- 返回值:1表示尚未过期,0表示过期了
EXPIRE name 10
3.1.8 返回key有效时间还剩多少
- 语法:TTL key
- 返回值:key剩余的有效时间,过期的话,返回过期了多少秒,也是数值,是负数
EXPIRE name 10
TTL name
//返回name这个key剩余的有效时间
(integer) 2
//如果时间到了,则返回0
(integer) 0
//如果有效期过了2s,则返回-1
(integer) -2
3.2 哈希值
- 哈希值是一个字符串类型的key和值的映射表,特别适合用于存储对象
3.2.1 HSET HMSET设置单个值和多个值
- 设置单个值:HSET
- 设置多个值:HMSET
//设置单个值
HSET person name yuhua
//意思就是设置person的name是yuhua,相当于js中的person={name:"yuhua"}
//设置多个值
HMSET person name yuhua age 10
//意思就是设置person的name是yuhua,age是10,相当于js中的person={name:"yuhua",age:"10"}
3.2.2 获取单个值、多个值和所有值
- 获取单个值:HGET
- 获取多个值:HMGET
- 获取所有制:HGETALL
//获取单个值
HGET person name //获取person对象中的name属性对应的值
//获取多个值
HMGET person name age //获取person对象中的name和age属性对应的值
//获取所有值
HGETALL person //获取person对象中所有的key和value
//返回:
1)"name" //key
2)"yuhua" //value
3)"age" //key
4)"10" //value
3.2.3 HDEL删除键
- 语法:HDEL 对象名 属性名
HDEL person name//删除对象person中的name
3.2.4 获取所有的键值
- 语法:HKEYS 对象名
HKEYS person //获取person对象的所有属性
//返回结果是
1) "name"
2) "age"
3.3 列表
- 列表时简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或尾部(右边)
3.3.1 向左/向右添加元素
- 向左添加元素语法:LPUSH 列表名(有点像数组) 值(字符串类型)
- 向右添加元素语法:RPUSH 列表名(有点像数组) 值(字符串类型)
LPUSH ids 2 //相当于向ids(列表/数组)左边插入一个字符串2
LPUSH ids 1
RPUSH ids 3 //相当于向ids(列表/数组)右边插入一个字符串3
RPUSH ids 4
RPUSH ids 5 6 //可以插入多个元素
3.3.2 LRANGE 查看元素
- 语法:LRANGE 列表名称 起始位置,结束位置
- 特别的:
- 如果查询所有元素:LRANGE 列表名 0 -1
LRANGE ids 0 2;//查询index为0到index为2的所有元素
//返回
1) "1"
2) "2"
3) "3"
LRANGE ids 0 -1;//查询所有元素,因为index为0,是最左边的一个,-1就相当于倒着数第一个,也就是最右边一个,所以是所有元素
3.3.3 LPOP RPOP 弹出元素,删除元素
- 最左边删除一个的语法:LPOP 列表名
- 最右边删除一个的语法:RPOP 列表名
//假设原先ids是 1 2 3
LPOP ids //删除最左边的一个元素
//查看所有元素
LRANGE ids 0 -1
//返回结果
1) "2"
2) "3"
RPOP ids //删除最右边的一个元素
//查看所有元素
LRANGE ids 0 -1
//返回结果
1) "2"
3.3.4 LINDEX 根据索引获取列表中的元素
- 语法:LINDEX 表名 索引号
//假设ids列表是 1 2 3
LINDEX ids 1
//返回
"2"
3.3.5 LLEN 获取列表长度
- 语法:LLEN 列表名称
LLEN ids
3.3.6 LREM 移出列表元素
- 语法:LREM 列表名 count value
- count>0:从表头开始向表尾搜索,移出与VALUE相等的元素,数量为COUNT
- count<0:从表尾开始向表头搜索,移出与VALUE相等的元素,数量为COUNT的绝对值
- count=0:移出表中所有与VALUE相等的值
- 举例:
//假设有列表 ids为3 2 2 2 1
LREN ids 2 2;//代表要删除的对象是ids列表,第一个2是正数,代表向右删除,且删除2个,第二个2代表要删除的值为2
LRANGE 0 -1
//结果为
1) "3"
2) "2"
3) "1"
//注意,如果第一个2是负数,则是向左删除。如果是0,代表移出所有与value相等的元素。
3.4 集合
- 集合是字符串类型的无序集合
- 特点:
- 不重复
- 有交集、并集等
3.4.1 SADD 添加
- 如果集合中已经存在指定的元素则返回0,如果不存在则添加成功返回1
SADD tags 1 //返回1,代表添加成功
SADD tags 2 //返回1,代表添加成功
SADD tags 2 //返回0,代表添加失败,因为集合的元素是唯一的
SADD tags 3 //返回1,代表添加成功
SADD tags 4 5 6 //返回3,代表添加成功3个
3.4.2 SMEMBERS 查看集合
SMEMBER tags
//返回结果是
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
3.4.3 SCARD 获取集合元素个数
SCARD tags
3.4.4 SREM 删除元素
- 语法: SREM 集合名称 成员元素的值
SREM tags 3
3.4.5 SINTER 交集
- 语法:SINTER 集合A 集合B
- 含义:返回集合A和集合B的交集
SADD A 1 2 3
SADD B 2 3 4
SINTER A B
//返回A和B的交集,为集合:
1) "2"
2) "3"
3.4.6 SUNION 并集
- 语法:SUNION 集合A 集合B
- 含义:返回集合A和集合B的并集
SADD A 1 2 3
SADD B 2 3 4
SUNION A B
//返回A和B的并集,为集合:
1) "1"
2) "2"
3) "3"
4) "4"
3.4.7 SDIFF 差集
- 语法:SDIFF 集合A 集合B
- 含义:集合A的元素减去集合B中跟A一样的元素
···
SADD A 1 2 3
SADD B 2 3 4
SDIFF A B
//返回A和B的差集,为集合:- “1”
···
- “1”
3.5 有序集合
- 有序集合和集合一样,也是字符串的集合,而且不能重复
- 有序集合和集合的区别是:每个有序集合都会关联一个double类型的分数,redis可以通过这个分数来为有序集合中的元素进行从小到大排序,元素不能重复,但分数可以重复
3.5.1 ZADD添加元素
- 语法:ZADD 有序集合名称 分数 元素值
- 注意:分数可以重复,元素值不能重复
//添加
ZADD levels 1 one
ZADD levels 2 two
ZADD levels 3 three
ZADD levels 4 four
//查看有序集合的成员
ZRANG levels 0 -1
//返回结果:
1) "one"
2) "two"
3) "three"
4) "four"
3.5.2 查看有序集合的成员
3.5.2.1 只查看成员,不查看分数
- 语法:ZRANG 有序集合名 0 -1
//查看有序集合的成员
ZRANG levels 0 -1
//返回结果:
1) "one"
2) "two"
3) "three"
4) "four"
3.5.2.2 查看成员和分数
- 语法“ZRANG 有序集合名 0 -1 WITHSCORES
//查看有序集合的成员
ZRANG levels 0 -1 WITHSCORES
//返回结果:
1) "one"
2) 1
3) "two"
4) 2
5) "three"
6) 3
7) "four"
8) 4
3.5.3 移除有序集合的成员
- 语法:ZREM 有序集合名 集合元素值
- 这样对应的分数也会被删除
ZREM levels one