Redis基础

什么是Redis

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库
Redis 与其他 key - value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储
  • Redis支持数据的备份,即master-slave模式的数据备份

Redis 优势

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作
  • 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性

Redis连接

远程连接redis客户端: redis-cli -h host -p port -a password
设置redis密码 config set requirepass password

命令 描述
auth password 验证密码是否正确
echo message 打印字符串
ping 查看服务是否运行
quit 关闭当前连接
select index 切换到指定的数据库

Redis keys 命令

命令 描述
del key 在key存在时删除key
dump key 用于序列化给定 key ,并返回被序列化的值
exists key 检测key是否存在 存在则返回1不存在则返回0
expire key seconds 为给定 key 设置过期时间
expireat key timestamp 左右和expirel类似,不同 的是expireat设置的参数是时间戳
pexpire key milliseconds 为给定 key 设置过期时间 设置的参数是毫秒
pexpireat key milliseconds-timestamp 设置 key 过期时间的时间戳(unix timestamp) 以毫秒计
key pattern 用于查找所有符合给定模式 pattern 的 key
move key db 将当前数据库的key转移到另一个数据库
persist key 移除 key 的过期时间,key 将持久保持
ttl key 以秒为单位,返回给定 key 的剩余生存时间
pttl 以毫秒为单位返回 key 的剩余的过期时间
randomkey 从当前数据库中随机返回一个 key
rename key newkey 修改 key 的名称
renamenx key newkey 仅当 newkey 不存在时,将 key 改名为 newkey
type key 返回key值的数据类型

Redis 字符串(String)

命令 描述
set key value 设置指定 key 的值
get key 获取对应key的值
getrange key start end 获取key指定偏移量的值
getset key value 设定指定key的值并返回该key之前的值
setnx key value 仅当key不存在时设置其值
setex key second value 设置key的值和过期时间
setrange key offset value 将key的值从偏移量为offset的位置覆盖为value
strlen key 返回指定key值的长度
mset [key value...] 设置一个或多个 key-value 对
msetnx [key value...] 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在
incr key 将key的数值自增1
incrby key increment 将 key 所储存的值加上给定的增量值(increment)
incrbyfloat key increment 将 key 所储存的值加上给定的浮点增量值(increment)
decr key 将key值自减1
decrby key increment key 所储存的值减去给定的减量值(decrement)
append key value 如果 key 已经存在并且是一个字符串, APPEND 命令将 指定value 追加到改 key 原来的值(value)的末尾

Redis 哈希(Hash)

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象
Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)

命令 描述
hset key field value 为哈希表中的字段赋值
hget key filed 返回哈希表指定字段的值
hgetall 返回哈希表中,所有的字段和值
hexists key field 查看哈希表 key 中,指定的字段是否存在
hdel key [field...] 删除指定哈希表指定字段
hincrby key field increment 为哈希表 key 中的指定字段的整数值加上增量 increment
hincrbyfloat key field increment 为哈希表 key 中的指定字段的浮点数值加上增量 increment
hkeys key 返回哈希表所有字段
hlen key 返回哈希表字段的数量
hmget key [field...] 获取哈希表多个字段的值
hmset key[key value...] 同时设置哈希表多个字段值
hsetnx key [key value...] 仅当哈希表字段不存在值设置多个字段值
hvals key 返回哈希表所有值

Redis 列表(List)

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)

命令 描述
lpush key [value...] 将一个或多个值插入到列表头部
lpushx key [value...] 将一个值插入到已存在的列表头部
lrange key start end 回列表中指定区间内的元素,区间以偏移量 START 和 END 指定
llen key 返回列表长度
lpop key 移出并获取列表的第一个元素
lrem key count value 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素
lset key index value 通过索引来设置元素的值
ltrim key start end 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除
lindex key 通过索引获取列表中的元素
linsert key before or after private value 在指定元素的前或者后面插入元素
blpop key timeout 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
brpop key timeout 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
brpoplpush source destination timeout 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
rpush key value 在列表中添加一个或多个值(尾部)
rpop 移除并获取列表最后一个元素
rpoplpush source destination 移除列表的最后一个元素,并将该元素添加到另一个列表并返回
rpushx key value 为已存在的列表添加值

Redis 集合(Set)

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)

命令 描述
sadd key [value...] 将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略
scard key 获取集合的成员数
sdiff key1[key2] 返回给定所有集合的差集
sdiffstore destination key1[key2] 返回给定所有集合的差集并存储在 destination 中
sinter key1[key2] 返回给定所有集合的交集
sinterstore destination key1[key2] 返回给定所有集合的交集并存储在 destination 中
sismember key value 判断 member 元素是否是集合 key 的成员
smembers key 返回集合中的所有成员
smove source destination value 将 member 元素从 source 集合移动到 destination 集合
spop key 移除并返回集合中的一个随机元素
srandmember key [count] 返回集合中一个或多个随机数
screm key [value...] 移除集合中一个或多个成员
sunion key1[key2] 返回所有给定集合的并集
sunionstore destination key1[key2] 所有给定集合的并集存储在 destination 集合中
SSCAN key cursor [MATCH pattern] 迭代集合中的元素

Redis 有序集合(sorted set)

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)

命令 描述
zadd key score1 member1[score2 member2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数
zscard key 获取有序集合的成员数
zcount key min max 计算在有序集合中指定区间分数的成员数
zincrby key increment member 有序集合中对指定成员的分数加上增量 increment

Redis 发布订阅

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
Redis 客户端可以订阅任意数量的频道。
下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:


image.png

当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:


image.png
命令 描述
PSUBSCRIBE pattern [pattern ...] 订阅一个或多个符合给定模式的频道。
PUBSUB subcommand [argument [argument ...]] 查看订阅与发布系统状态。
PUBLISH channel message 将信息发送到指定的频道
PUNSUBSCRIBE [pattern [pattern ...]] 退订所有给定模式的频道
[SUBSCRIBE channel [channel ...] 订阅给定的一个或多个频道的信息
UNSUBSCRIBE [channel [channel ...]] 指退订给定的频道

Redis 事务

Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:

  • 批量操作在发送 EXEC 命令前被放入队列缓存
  • 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行
  • 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中

一个事务从开始到执行会经历以下三个阶段:

  • 开始事务
  • 命令入队
  • 执行事务
命令 描述
multi 开启事物
exec 提交事物
discard 取消事物
watch [key...] 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断
unwatch 取消 WATCH 命令对所有 key 的监视
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,252评论 6 516
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,886评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,814评论 0 361
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,869评论 1 299
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,888评论 6 398
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,475评论 1 312
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,010评论 3 422
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,924评论 0 277
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,469评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,552评论 3 342
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,680评论 1 353
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,362评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,037评论 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,519评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,621评论 1 274
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,099评论 3 378
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,691评论 2 361

推荐阅读更多精彩内容

  • 超强、超详细Redis入门教程 转载2017年03月04日 16:20:02 16916 转载自: http://...
    邵云涛阅读 17,452评论 3 313
  • 【本教程目录】 1.redis是什么2.redis的作者3.谁在使用redis4.学会安装redis5.学会启动r...
    徐猿猿阅读 1,870评论 0 35
  • 概念 Redis是一个开源的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value内存数据库,...
    jiangmo阅读 636评论 0 3
  • 重点参考链接: http://www.cnblogs.com/wangyuyu/p/3786236.html Re...
    Kevin_Junbaozi阅读 2,187评论 0 21
  • 《童言童语(一)》 1 儿子指着桌子上的抽纸问我:“妈妈,纸是什么东西做的?” 我答:“是木头,大树。” 他质疑:...
    米苏闻阅读 537评论 3 3