Redis
Redis是一个开源的使用ANSI C语言编写、遵守BDS协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis又称为数据结构服务器,因为值(value)有以下:字符串(String)、哈希(Hash)、列表(list)、集合(set)、有序集合(Zset)。
Redis的特点:1、Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
2、Redis不仅支持简单的key-value类型的数据,同时还提供list、set、zset、hash数据结构的存储
3、Redis支持数据的备份,即master-slave模式的数据备份。
Redis优势:性能极高(读写速度快)、丰富的数据类型、原子性(Redis的所有操作都是原子性的,原子性:要么成功执行要么失败完全不执行)
Redis支持五种数据类型:字符串(String)、哈希(Hash)、列表(list)、集合(set)、有序集合(Zset)
String(字符串)
一个key对应一个value,String类型的值最大能存储512MB
Hash(哈希)
Hash是一个键值(key==>)对集合,Hash是一个String类型的field和value的映射表,hash特别适合用于存储对象
List(列表)是简单的字符串列表,按照插入顺序排序
Set(集合)
Set是string类型的无序集合
集合是通过哈希表实现,添加、删除、查找的复杂度都是O(1)。
Zset(sorted set:有序集合)
类型 |
简介 |
特性 |
场景 |
String(字符串) |
二进制安全 |
可以包含任何数据(jpg图片或序列化的对象),一个键最大能存储512M |
|
Hash(哈希值) |
键值对集合,Map类型 |
适合存储对象,并且可以像数据库中的update一个属性一样只修改一项属性值 |
存储、读取、修改用户属性 |
List(列表) |
链表(双向链表) |
增删快、提供了操作某一段元素的API |
1、最新消息排行榜、2、朋友圈的时间线
3、消息队列 |
Set集合 |
哈希表实现、元素不重复 |
1、添加、删除、查找的复杂度都是O(1) 2、为集合提供了求交集、并值、差集
|
1、共同好友 2、利用唯一性,统计访问网站的所有独立ip 3、好友推荐时,根据tag求交集,大于某个阈值就可以推荐 |
SortedSet(有序集合) |
将Set中的元素增加一个权重参数score、元素按score有序排序 |
数据插入集合时、已进行排序 |
1、排行榜 2、带权重的消息队列 |
Redis命令
要在redis服务上执行命令需要一个redis客户端,存在于默认的安装包中
启动redis客户端:redis-cli,连接本地的redis服务
避免中文乱码:redis-cli - - raw
连接到本地的redis服务并执行ping命令,用于检测redis服务是否启动
redis-cli -h host -p port -a password
例:redis-cli -h 127.0.0.1 -p 6379 -a "mypass"
Redis keys命令
Redis Key 命令 |
|
DEL key |
Key存在时删除key |
DUMP key |
序列化给定key,并返回被序列化的值 |
EXISTS key |
检查给定的key是否存在 |
EXPIRE key seconds |
设置key的过期时间,以秒计 |
EXPIREAT key timestamp |
设置过期时间,接受的参数是timestamp |
PEXPIRE key milliseconds |
设置key的过期时间以毫秒计 |
PEXPIREAT key milliseconds-timestamp |
设置key过期的时间戳 |
KEYS pattern |
查找所有符合给定模式的key |
MOVE key db |
将当前数据库的key移动到给定的数据库db中 |
PERSIST key |
移除key的过期时间,key将持久保持 |
PTTL key |
以毫秒为单位返回key的剩余的过期时间 |
TTL key |
以秒为单位,返回给定的key的剩余生存时间(TTL,time to live) |
RANDOMKEY |
从当前数据库中随机返回一个key |
RENAME key newkey |
修改key的名称 |
RENAME key newkey |
仅当newkey不存在时,将key改名为newkey |
TYPE key |
返回key所储存的值的类型 |
Redis Hash(哈希)
hash是一个string类型的field和value的映射表,hash特适用于存储对象
Redis hash命令
Hash命令 |
|
HDEL key field |
删除一个或多个哈希表字段 |
HEXISTS key field |
查看哈希表key中,指定的字段是否存在 |
HGET key field |
获取存储在哈希表中指定字段的值 |
HGETALL key |
获取在哈希表中指定key的所有字段和值 |
HKEYS key |
获取所有哈希表中的字段 |
HLEN key |
获取哈希表中字段的数量 |
HMGET key field |
获取所有给定字段的值 |
HMSET key1 field value1 |
同时将多个field-value(域值对设置到哈希表key中) |
HSET key field value |
将哈希表中key中的字段field的值设为value |
HSETNX key field value |
只有在字段field不存在时,设置哈希表字段的值 |
HVALS key |
获取哈希表中所有值 |
HSCAN key cursor |
迭代哈希表中的键值对 |
Redis 列表(List)
列表是简单的字符串列表,按照插入顺序排序。(可以添加一个元素到列表的头部或者尾部)
List(列表) |
|
BLPOP key1[key2] timeout |
移出并获取列表的第一个元素 |
BRPOP key1[key2] timeout |
移出并获取列表的最后一个元素 |
BRPOPLPUSH source destination timeout |
从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它 |
LINDEX key index |
通过索引获取列表中的元素 |
LINSERT key BEFORE|AFTER pivot value |
在列表的元素前或后插入元素 |
LLEN key |
获取列表长度 |
LPOP key |
移出并获取列表的第一个元素 |
LPUSH key value |
将一个或多个值插入到列表头部 |
LPUSHX key value |
将一个值插入到已存在的列表头部 |
LRANGE key start stop |
获取列表指定范围内的元素 |
LREM key count value |
移除列表元素 |
LSET key index value |
通过索引设置列表元素的值 |
LTRIM key start stop |
对一个列表进行修剪 |
RPOP key |
移除列表的最后一个元素,返回值为移除的元素 |
RPOPLPUSH source destination |
移除列表的最后一个元素,并将该元素添加到另一个列表并返回 |
RPUSH key value |
在列表中添加一个或多个值 |
RPUSHX key value |
为已存在的列表添加值 |
Redis Set(集合)
Set是String类型的无序集合。集合成员是唯一的,集合中不能出现重复的数据。
Redis中集合是通过哈希表实现的,所以添加、删除、查找的复杂度都是O(1)。
Set集合命令 |
|
SADD key1 member1 |
向集合添加一个或多个成员 |
SCARD key |
获取集合的成员数 |
SDIFF key1 |
返回给定所有集合的差集 |
SDIFFSTORE destination key1 |
返回给定所有集合的差集并存储在destination中 |
SINTER key1 |
返回给定所有集合的交集 |
SINTERSTORE destination key1 |
返回给定所有集合的交集并存储在destination中 |
SISMEMBER key member |
判断member元素是否是集合key的成员 |
SMEMBERS key |
返回集合中的所有成员 |
SMOVE source destination member |
将member元素从source集合移动到destination集合 |
SPOP key |
移除并返回集合中的一个随机元素 |
SRANDMEMBER key |
返回集合中一个或多个随机数 |
SREM key member1 |
移除集合中一个或多个成员 |
SUNION key1 |
返回所有给定集合的并集 |
SUNIONSTORE destination key1 |
所有给定集合的并集存储在destination集合中 |
SSCAN key cursor |
迭代集合中的元素 |
Redis Sorted Set有序集合
Redis有序集合是String类型元素的集合,且不允许重复的成员
有序集合的成员是唯一的,但分数(Score)却可以重复
集合是通过哈希表实现,添加、删除、查找的复杂度都是O(1).
Sorted Set(有序集合) |
|
ZADD key score1 member |
向有序集合添加一个或多个成员 |
ZCARD key |
获取有序集合的成员数 |
ZCOUNT key min max |
计算在有序集合中指定成员的分数的成员数 |
ZINCRBY key increment member |
计算给定的一个或多个有序集合的交集并将结果集存储在新的有序集合key中 |
ZLEXCOUNT key min max |
在有序集合中计算指定字典区间内的成员数量 |
ZRANGE key start stop |
通过索引区间返回有序集合成指定区间内的成员 |
ZRANGEBYLEX key min max |
通过字典区间返回有序集合的成员 |
ZRANGEBYSCORE key min max |
通过分数返回有序集合指定区间内的成员 |
ZRANK key member |
返回有序集合中的一个或多个 |
ZREM key member |
移除有序集合中的一个或多个 |
ZREMRANGEBYLEX key min max |
移除有序集合中给定的字典区间的所有成员 |
ZREMRANGEBYRANK key start stop |
移除有序集合中给定的排名区间的所有成员 |
ZREMRANGEBYSCORE key min max |
移除有序集合中给定的分数区间的所有成员 |
ZREVRANGE key start stop |
返回有序集合中指定区间内的成员,通过索引,分数从高到低 |
ZREVRNGEBYSCORE key max min |
返回有序集合中指定分数区间内的成员,分数从高到低 |