REmote DIctionary Server(Redis) 是一个key-value存储系统,是跨平台的非关系型数据库
1.Redis命令
2.基本数据类型
1.Redis命令
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。
Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型
Redis服务(Redis服务端-Linux端)启动:
- redis-server 前台启动,即以命令行模式启动
- redis-server & 后台启动,即以守护进程模式启动
- redis-server redis.conf & :根据配置文件启动,如果修改了redis的配置文件redis.conf,必须在启动时指定配置文件,否则修改无效!
- ps -ef|grep redis 在Linux下查看redis成功启动下的进程ID
- 客户端启动基本命令
终端并输入命令 redis-cli,该命令会连接本地的 redis 服务。执行 PING 命令,该命令用于检测 redis 服务是否启动
1 | redis-cli |
- 远程服务上执行命令
1 | redis-cli -h host -p port -a password |
- Redis时候会有中文乱码,要在 redis-cli 后面加上 –raw
1 | redis-cli --raw |
- Redis认证
当我们的redis设置密码后,再次登陆后我们需要输入密码
1 | auth <password> |
- 获取信息
获取信息的指令为info
,可在后面接多种关键词
1 | 获取所有信息 |
- 数据库的切换
Select 命令用于切换到指定的数据库,数据库索引号 index 用数字值指定,以 0 作为起始索引值,不能超过15,因为总共只有16个数据库
1 | 选择目标实例 |
- 查询当前连接数据库键总数
dbsize
- Client List
用于返回所有连接到服务器的客户端信息和统计数据
- Config
config实现对redis服务器的配置文件相关操作
1 | config [GET, SET, RESETSTAT, REWRITE] parameter |
- Time
一个包含两个字符串的列表: 第一个字符串是当前时间(秒级),而第二个字符串是当前这一秒钟已经逝去的微秒数。
- redis查看版本号
1 | # 查看服务端版本 |
- 关闭redis服务
1 | # 关闭redis默认配置下的服务 |
2.基本全局指令
命令 | 描述 |
---|---|
del key | 删除目标key(被删除成功,命令执行后输出(int)1,否则0) |
exists key | 判断key是否存在 |
expire key seconds | 为key设置过期时间,以秒计 |
keys pattern | 查找所有符合给定模式( pattern)的key,(keys * 表示所有key) |
move key db | 将当前数据库的 key 移动到给定的数据库 db 当中 |
persist key | 移除key的过期时间,key将持久保持 |
pttl key | 以毫秒为单位返回 key 的剩余的过期时间 |
ttl key | 以秒为单位返回 key 的剩余的过期时间 |
randomkey | 从当前数据库中随机返回一个 key |
rename key newkey | 修改 key 的名称 |
type key | 返回 key 所储存的值的类型 |
3.基本数据类型
类型 | 简介 | 特性 | 场景 |
---|---|---|---|
String | 二进制安全 | 可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M | — |
Hash | 键值对集合,即编程语言中的Map类型 适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去) | 存储、读取、修改用户属性 | |
List | 链表(双向链表) | 增删快,提供了操作某一段元素的API | 1,最新消息排行等功能(比如朋友圈的时间线) 2,消息队列 |
Set | 哈希表实现,元素不重复 | 1、添加、删除,查找的复杂度都是O(1) 2、为集合提供了求交集、并集、差集等操作 | 1、共同好友 2、利用唯一性,统计访问网站的所有独立ip 3、好友推荐时,根据tag求交集,大于某个阈值就可以推荐 |
Sorted Set | 将Set中的元素增加一个权重参数score,元素按score有序排列 | 数据插入集合时,已经进行天然排序 | 1、排行榜 2、带权重的消息队列 |
String字符串
下表列出常用的Redis字符串命令
命令 | 描述 |
---|---|
SET key value | 设置指定 key 的值 |
GET key | 获取指定 key 的值 |
getrange key start end | 字符串的截取,索引默认从0开始,满足闭区间 |
mget key1 [keyN] | 获取所有(一个或多个)给定 key 的值 |
strlen key | 返回字符串值的长度(不存在时返回0) |
mset key value [key value …] | 同时设置一个或多个 key-value 对 |
Setex key seconds value | 为指定的key设置值及其过期时间。若key存在,将会替换旧的值 |
Psetex key milliseconds value | 这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间 |
incr key | 将 key 中储存的数字值增一 |
incrby key increment | 将 key 所储存的值加上自定义的增量值(increment) |
incrbyfloat key increment | 将 key 所储存的值加上给定的浮点增量值 |
decr key | 将key中储存的数字值减一 |
decrby key decrement | key 所储存的值减去给定的减量值(decrement) |
append key value | 如果key已经存在并且是一个字符串,将指定的value追加到该key原来值(value)的末尾,相当于字符串的拼接 |
——————————————————————————————————————–
Hash哈希
Redis hash是一个string类型的field(字段)和value(值)的映射表,hash 特别适合用于存储对象。Redis 中每个 hash 可以存储 23^2 - 1 键值对(40多亿)
命令 | 描述 |
---|---|
hdel key field1 [valueN] | 删除一个或多个哈希表字段 |
hexists key field | 查看哈希表key中,指定的字段是否存在 |
hget key field | 获取存储在hash中指定字段的值 |
hgetall key | 获取在哈希表中指定key的所有字段和值 |
hkeys key | 获取存储在hash中指定字段的值 |
hincrby key filed increment | 哈希表 key 中的指定字段的整数值加上增量 increment |
hincrbyfloat key filed increment | 哈希表 key 中的指定字段的浮点值加上增量 increment |
hset key field | 将哈希表key中的字段field的值设为value |
hmset key fieldN valueN | 同时将多个 field-value (域-值)对设置到哈希表 key 中 |
hkeys key | 获取所有哈希表中的字段 |
hlen key | 获取哈希表中字段的数量 |
hmget key filed [fieldN] | 获取所有给定字段的值 |
hvals key | 获取hash所有的值 |
List列表
Redis列表是简单的字符串列表,按照插入顺序排序,元素可以重复,可以从列表的头部或尾部插入数据
命令 | 描述 |
---|---|
llen key | 获取列表长度 |
lindex key index | 通过索引获取列表元素,起始索引为0,也支持负索引,形如python |
rpush key val1,val2 | 将一个或多个值插入到列表的尾部,如果列表不存在,自动创建空列表 |
lpush key val1,val2 | 将一个或多个值插入到列表的头部,如果列表不存在,自动创建空列表 |
rpop key | 移除列表的最后一个元素,并返回该元素 |
lpop key | 移除列表的第一个元素,并返回该元素 |
Lrange key start end | 列表截取,起始索引为0,为闭区间 |
blpop key timeout | 移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 |
brpop key timeout | 移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 |
Set集合
Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
命令 | 描述 |
---|---|
Scard key | 获取集合中元素数量 |
Smembers key | 获取集合中所有成员 |
Sadd key memberN | 向集合中添加一个或多个元素 |
Sdiff key1 keyN | 返回第一个集合中独有的元素,不存在则视为空集 |
Sinter key1 keyN | 返回给定集合的交集 |
Sunion key1 keyN | 返回给定集合的并集 |
Sdiffstore newKey key1 keyN | 将给定集合之间的差集存储在指定的newKey集合中。如果指定的集合key已存在,则会被覆盖 |
Sinterstore newKey key1 keyN | 将给定集合之间的交集存储在指定的newKey集合中。如果指定的集合key已存在,则会被覆盖 |
Sunionstore newKey key1 keyN | 将给定集合之间的并集存储在指定的newKey集合中。如果指定的集合key已存在,则会被覆盖 |
Sorted-Set有序集合
Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)
命令 | 描述 |
---|---|
Zcard key | 获取有序集合中成员数 |
Zscore key member | 获取指定成员的分数 |
Zadd key scoreN valueN | 将一个或多个成员元素及其分数值加入到有序集合(分数值可以是整数值或双精度浮点数) |
Zcount key min max | 计算有序集合中指定分数区间的成员数量 |
Zincrby key increment member | 对有序集合中指定成员的分数加上增量increment |
Zrange key start stop [WITHSCORES] | 返回有序集中,指定区间内的成员或与分数,起始索引为0,接受负索引,满足闭区间,升序 |
Zrevrange key start stop [WITHSCORES] | 返回有序集中,指定区间内的成员或与分数,起始索引为0,接受负索引,满足闭区间,降序 |
Zrevrangebyscore key max min [WITHSCORES] | 返回有序集中指定分数区间内的所有的成员,倒序 |
Zrangebyscore key min max [WITHSCORES] | 返回有序集中指定分数区间内的所有的成员,升序 |
Zunionstore | 计算给定的一个或多个有序集的并集,并存储在新的 key 中 |
拓展:
- Zunionstore详细使用说明
语法:
1 | Zunionstore destination numkeys key [keyN] |
- destination:新有序集合
- numkeys:表示参与计算的有序集合数目
- key [keyN]:表示参与计算的有序集合
- WEIGHTS:权重。要一一对应,一个权重对应一个有序集合,要使用权重乘以对应集合的分数score
- AGGREGATE:指定并集的结果集的聚合方式,默认为sum
简要描述:用权重乘以对应有序集合的分数,然后根据成员分类,同一类新的分数进行聚合函数处理