1、Redis 五大数据类型
Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sorted set:有序集合)。
1.1 字符串数据类型操作命令
# 创建键值:
set key value [EX seconds] [PX milliseconds] [NX|XX]
EX 以秒作为过期时间
PX 以毫秒作为过期时间,两者不能一起使用
NX 表示键不存在时创建,也就是如果键已经存在了,不会覆盖。
XX 表示键存在时就覆盖原先值,不存在则不创建。
GET key 获取键值
GETSET key value 修改一个键值,并返回旧值
mset key value key2 value2 ... 一次性创建多个键值
MGET KEY1 KEY2 获取一个或者多个给定key的值
DEL key 删除键值
EXISTS key 检查给定的key是否存在
TTL key 以秒为单位,返回给定key的剩余生存时间
EXPIRE key seconds 为key设置过期时间
PEXPIRE key milliseconds 设置key的过期时间以毫秒计
KEYS pattern 查找所有符合给定模式的key
* 匹配所有字符
? 匹配单个字符
[abc] 匹配a或者b或者c
MOVE key db 将当前数据库的key移动到数据库db当中
PERSIST key 移除key的过期时间,key将持久保存
RANDOMKEY 从当前数据库中随机返回一个key
RENAME key newkey 修改key的名称
RENAMENX key newkey 仅当newkey不存在时,将key改名为newkey,如果已经存在,则不改
TYPE key 返回key所存储的值的类型
1.2 链表数据类型操作命令
链表是一个双向可读写的管道,头部是左边,尾部是右边,一个链表多可以包含2的32次方减一,也就是4G个元素。
LPUSH key value [value ...] 在头部(左边)插入链表元素
RPUSH key value [value ...] 在尾部(右边)插入链表元素
LRANGE key start stop 查看链表的元素,start,stop表示的是索引起始点和结束点
LRANGE key 0 -1 查看链表的所有元素
RPOP key 删除链表的尾部元素
LPOP key 删除链表的首部元素
LREM key count value 删除链表中的元素
count 表示删除几个元素,默认从左往右删,如果是从右往左就用-count, 比如lrem name -2 meixi 表示从右往左删除两个meixi
LINSERT key BEFORE|AFTER pivot value 在链表的某个元素前或者后插入一个值
pivot 指定某个已经存在的元素
1.3 集合数据类型操作命令
集合特点:无序性,唯一性
SADD key member [member ...] 添加集合元素,如果这个key没有,就创建
SMEMBERS key 查看集合元素
SREM key member [member ...] 删除集合元素
SPOP key [count] 随机删除元素,默认是删除一个
SRANDMEMBER key [count] 随机返回集合元素,默认是一个
SISMEMBER key member 判断元素是否在集合中,是返回1,不是返回0
SINTER key [key ...] 求两个集合的交集
SUNION key [key ...] 求两个集合的并集
SINTERSTORE destination key [key ...] 把求出来的交集进行存储
SUNIONSTORE destination key [key ...] 把求出的并集进行存储
1.4 哈希数据类型操作命令
hash是字符串类型的field和value的映射表,一般用于做存储对象。每个hash可以存储2的32次方减 一,也就是4G键值对。
HSET key field value 设置哈希值
范例:
HSET user1 name cluo
HSET user1 age 30
HSET user1 job football
HGETALL key 获取key中的所有域和值
HGET key field 获取key中某个域的值
HMGET key field [field ...] 获取key中多个域的值
HDEL key field [field ...] 删除key中某个域和值
2、Redis 事务
redis支持简单的事务,不支持回滚,支持取消事务
实例一:
#设置两个初始值
127.0.0.1:6379> set cluo 500
OK
127.0.0.1:6379> set meixi 500
OK
#开启事务
127.0.0.1:6379> multi
OK
#减100
127.0.0.1:6379> decrby cluo 100
QUEUED
#加100
127.0.0.1:6379> incrby meixi 100
QUEUED
#执行事务
127.0.0.1:6379> exec
1) (integer) 400
2) (integer) 600
3) "400"
#结果
127.0.0.1:6379> get cluo
"400"
127.0.0.1:6379> get meixi
"600"
实例二:
#设置初始值
127.0.0.1:6379> set cluo 500
OK
#开启事务
127.0.0.1:6379> multi
OK
#减100
127.0.0.1:6379> decrby cluo 100
QUEUED
#取消事务
127.0.0.1:6379> discard
OK
#结果
127.0.0.1:6379> get cluo
"500"
3、Redis 发布订阅
Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。 Redis 客户端可以订阅任意数量的频道。
3.1 发布频道、订阅频道
#发布一个频道,因为还没人订阅,所以返回0
127.0.0.1:6379> publish xijia "Welcome to xijia"
(integer) 0
# 再开启一个连接,订阅该频道
127.0.0.1:6379> subscribe xijia
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "xijia"
3) (integer) 1
1) "message"
2) "xijia"
# 因为是刚订阅,所以以前的消息没有收到,可以再发布一条消息测试。
# 重新发布一条消息
127.0.0.1:6379> publish xijia "Welcome to xijia"
(integer) 1
#有一个订阅,所以返回1
#另一端订阅到该消息
127.0.0.1:6379> subscribe xijia
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "xijia"
3) (integer) 1
1) "message"
2) "xijia"
3) "Welcome to xijia"
订阅多个频道
127.0.0.1:6379> psubscribe xi*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "xi*"
3) (integer) 1
# 查看活跃的频道
127.0.0.1:6379> pubsub channels
1) "xijia"
发布订阅常用命令
PUBLISH channel message 将信息发送到指定的频道。
SUBSCRIBE channel [channel ...] 订阅给定的一个或多个频道的信息。
PSUBSCRIBE pattern [pattern ...] 订阅一个或多个符合给定模式的频道。
PUNSUBSCRIBE [pattern [pattern ...]] 退订所有给定模式的频道。
UNSUBSCRIBE [channel [channel ...]] 指退订给定的频道。
PUBSUB subcommand [argument [argument ...]] 查看订阅与发布系统状态。
4、Redis 服务器命令
CLIENT LIST 获取连接到服务器的客户端连接列表
CLIENT SETNAME connection-name 设置当前连接的名称
CLIENT GETNAME 获取连接的名称
CLIENT KILL ip:port 关闭客户端连接,开启一个新的连接
CONFIG GET * 获取Redis服务器所有配置信息
CONFIG GET parameter 获取指定配置参数的值
CONFIG SET parameter value 修改 redis 配置参数,无需重启
DBSIZE 返回当前数据库的 key 的数量
BGREWRITEAOF 异步执行一个 AOF(AppendOnly File) 文件重写操作
BGSAVE 在后台异步保存当前数据库的数据到磁盘
SAVE 在主进程同步保存数据到硬盘
FLUSHALL 删除所有数据库的所有key
FLUSHDB 删除当前数据库的所有key
SHUTDOWN [NOSAVE] [SAVE] 异步保存数据到硬盘,并关闭服务器(不要轻易执行)
SLAVEOF host port 将当前服务器转变为指定服务器的从属服务器(slave server)
ROLE 返回主从实例所属的角色
SYNC 用于复制功能(replication)的内部命令