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
  1. 客户端启动基本命令

终端并输入命令 redis-cli,该命令会连接本地的 redis 服务。执行 PING 命令,该命令用于检测 redis 服务是否启动

script
1
2
3
4
5
$ redis-cli
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING

PONG
  1. 远程服务上执行命令
script
1
redis-cli -h host -p port -a password
  1. Redis时候会有中文乱码,要在 redis-cli 后面加上 –raw
script
1
redis-cli --raw
  1. Redis认证

当我们的redis设置密码后,再次登陆后我们需要输入密码

script
1
auth <password>
  1. 获取信息

获取信息的指令为info,可在后面接多种关键词

script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 获取所有信息
info

# 获取服务端信息
info server

# 获取内存信息
info memory

# 获取主从信息
info Replication

# 获取当前连接数
info clients

# 查看redis最大连接数
config get maxclients
  1. 数据库的切换

Select 命令用于切换到指定的数据库,数据库索引号 index 用数字值指定,以 0 作为起始索引值,不能超过15,因为总共只有16个数据库

script
1
2
3
4
5
6
7
8
# 选择目标实例
select index

# 清空当前连接的数据库(慎用)
flushdb

# 清空所有数据库(慎用)
flushall
  1. 查询当前连接数据库键总数

dbsize

  1. Client List

用于返回所有连接到服务器的客户端信息和统计数据

  1. Config

config实现对redis服务器的配置文件相关操作

1
2
3
4
config [GET, SET, RESETSTAT, REWRITE] parameter

# 查看所有的配置参数
config get *
  1. Time

一个包含两个字符串的列表: 第一个字符串是当前时间(秒级),而第二个字符串是当前这一秒钟已经逝去的微秒数。

  1. redis查看版本号
1
2
3
4
5
6
7
# 查看服务端版本
redis-server -v
redis-server --version

# 查看客户端版本
redis-cli -v
redis-cli --version
  1. 关闭redis服务
1
2
3
4
5
# 关闭redis默认配置下的服务
redis-cli shutdown

# 经由redis-cli客户端来关闭redis服务端
redis-cli -h ip -p port -a password shutdown

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 中

拓展:

  1. Zunionstore详细使用说明

语法:

1
2
Zunionstore destination numkeys key [keyN] 
[WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
  • destination:新有序集合
  • numkeys:表示参与计算的有序集合数目
  • key [keyN]:表示参与计算的有序集合
  • WEIGHTS:权重。要一一对应,一个权重对应一个有序集合,要使用权重乘以对应集合的分数score
  • AGGREGATE:指定并集的结果集的聚合方式,默认为sum

简要描述:用权重乘以对应有序集合的分数,然后根据成员分类,同一类新的分数进行聚合函数处理


 评论

联系我 | Contact with me

Copyright © 2019-2020 谁知你知我,我知你知深。此恨经年深,比情度日久

博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议