Redis数据介绍与指令大全

数据类型初识

作为 Key-value 型数据库,Redis 也提供了键(Key)和键值(Value)的映射关系。但是,除了常规的数值或字符串,Redis 的键值还可以是以下形式之一:

Lists (列表)
Sets (集合)
Sorted sets (有序集合)
Hashes (哈希表)

适用场景

  1. 取最新的n个数据,如读取作家博客最新的50篇文章,通过List实现按时间排序的数据的高效获取
  2. 排行榜应用,以特定条件为排序标准,将其设成sorted set 的score,进而实现高效获取
  3. 需要精准设定过期时间的应用,把sorted set 的 score 值设置成过期时间的时间戳,那么就可以简单地通过过期时间排序,定时清除过期数据了
  4. 计数器应用,Redis 的命令都是原子性的,可以轻松地利用 INCR,DECR 命令来构建计数器系统。
  5. 去除大量数据中的重复数据,将数据放入set中,就能实现对重复数据的排除
  6. 构建队列系统使用 list 可以构建队列系统,使用 sorted set 甚至可以构建有优先级的队列系统。
  7. 实时系统,反垃圾系统通过上面说到的 set 功能,你可以知道一个终端用户是否进行了某个操作,可以找到其操作的集合并进行分析统计对比等。
  8. Pub/Sub构建实时消息系统
  9. 缓存

redis数据类型及操作详解

1. strings类型及操作

  1. string 本质是个 byte 数组,可以包含任何数据,是二进制安全的。

    二进制安全功能本质上是把输入当作一个没有任何特殊的原生流,其在操作上应包含一个字符所能有的256种可能的值(假设为8为字符)。

  2. c语言定义:
    struct sdshdr {
       long len;//buf数组的长度
       long free;//数组中剩余的可用字节
       char buf[]; //存储字符
       };
  3. 操作方法:
命令 介绍
set [key] [value] 设置值
setnx [key] [value] 如果key存在,返回0并不生效修改
setex [key] [time] [value] 指定有效期为time秒
setrange [key] n [string] 将key对应value第n位后面的字符替换成string
mset [key1] [value1] [key2] [value2] …… 一次设置多个值
msetnx 类似setnx,设置多个值,,如果key存在,则返回0且修改不生效
get [key] 获取key对应的值
getset [key] [value] 设置key的值,并返回key的旧值
getrange [key] n1 n2 获取key对应值的索引位置从n1到n2的字符串
mget [key1] [key2] [key3]…… 一次获取多个key对应的值,如果不存在,则返回nil
incr [key] 对key的值作加1操作,如果incr一个不存在的值,则对q赋值为1,如果key对应值不是int型则返回错误: -ERR value is not an integer or out of range
incrby [key] [num] 加指定值 ,key 不存在时候会设置 key,并认为原来的 value 是 0
decr [key] 对key的值做的是减1操作,decr 一个不存在 key,则设置 key 为-1
decrby [key] [num] 对key对应的value-num
append [key] [string] 将string追加到key对应的值尾,返回新字符串的长度
strlen [key] 读取key对应value的长度

2. hashes类型及操作

  1. Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象,相较string,由于使用了zipmap而占用更少的内存
  2. 操作方法:
命令 介绍
hset [object] [field] [value] 给object添加属性
hsetnx 类似hset,如果field已存在,则返回0且修改不生效
hmset [object] [field1] [value1] [field2] [value2]…… 同时设置多个值
hget [object] [field] 获取对象对应属性的值
hmget [object] [field1] [field2] 获取多个值
hincrby [object] [field] num 给field对应值 + num
hexists [object] [field] 判断特定对象指定fiels是否存在
hlen [object] 返回对象属性数量
hdel [object] [field] 删除object对应field
hkeys [object] 返回对象所有field
hvals [object] 返回对象所有field对应的value
hgetall [object] 返回对象所有field和value

3. list类型及操作

  1. list 底层实现是一个双向链表,最大长度为2^32,也可用作栈
  2. 操作方法:
命令 介绍
lpush/rpush [list] [value] 从头/尾部向list添加值,返回list长度
lrange/ [list] start end 返回list对应索引区间的值
linsert [list] [before/after] ‘value1’ ‘value2’ 在list的value1的前面/后面插入value2
lset [list] index ‘value’ 在特定索引插入value,注意:如果index为负值,则从list尾部开始算起
lrem [list] num ‘value’ 从list中删除num个和value相同的值,若num>0,则从链头算起,若<0则从链尾算起,若=0则删除全部
ltrim [list] start end 仅保留list中索引从start到end的值
lpop [list] 从头部删除元素,同时返回该元素
rpop [list] 从尾部删除元素并返回
rpoplpush [list1] [list2] 从list1的尾部移除元素并添加到list2的头部,最后返回被移除的元素值,整个操作是原子的.如果list1是空或者不存在返回 nil
lindex [list] index 返回list中index索引位置的元素
llen [list] 返回list的长度

4. set类型及操作

  1. 是 string 类型的无序集合。set 元素最大可以包含(2 的 32 次方)个元素。set 的是通过 hash table 实现的,hash table 会随着添加或者删除自动的调整大小。调整 hash table 大小时候需要同步(获取写锁)会阻塞其他读写操作。
  2. 操作方法:
命令 介绍
smembers [set] 查看set中的元素
sadd [set] [value] 像set中插入value,成功插入返回1,插入set中已有的value则失败且返回0
srem [set] [value] 删除set中对应的value,删除成功返回1,若不存在则返回0
spop [set] 随机删除并返回set中的元素
sdiff [set1] [set2] 删除set1中在set2里也存在的元素,返回删除操作后的set1
sdiffstore [set1] [set2] [set3] 将sdiff [set2] [set3] 的结果保存在set1中
sinter [set1] [set2] 返回set1 set2共有元素
sinterstore [set1] [set2] [set3] 将sinter [set2] [set3] 结果保存在set1中
sunion [set1] [set2] 返回[set1] [set2]的并集
sunionstore [set1] [set2] [set3] 将[set2] [set3]的并集保存在[set1]中
smove [set1] [set2] [value] 将[set1] 的value移动到set2中,若value存在于set1,无论set2是否已存在,都(成功)返回1,不存在于set1则(失败)返回0
scard [set] 返回set中的元素个数
sismember [set] [value] 判断value是否为set中的元素,是则返回1,否则返回0
srandmember [set] 随机返回set中的一个元素

5. sorted sets 类型及操作

  1. sorted set 在set的基础上增加了一个标识属性,它可以在set添加或修改元素时指定,每次指定,set会自动按标识调整顺序,set的每一个元素都会关联一个double类型的score。使用时往往我们把要排序的字段作为score存储,对象id则作为元素存储
  2. 操作方法:
命令 介绍
zadd [zset] sco “value” 向zset中添加score为sco的value,如果value已存在,则仅修改score,同时返回0,否则返回1
zrange/zrangebyscore [zset] start end (wisthscores) 返回zset中从索引start到end的元素,withscores可选是否同时显示元素对应的score
zrem [zset] ‘value’ 删除zset中值为value的元素
zincrby [zset] n ‘value’ 如果zset中存在value,则令其score加n,否则添加value,令其score为n
zrank [zset] ‘value’ 返回zset中值为value的元素排名(按score从小到大)
zrevrank [zset] ‘value’ 按score从大到小返回元素排名
zrevrange [zset] start end 返回zset[end…start]
zcount [zset] start end 返回zset在指定区间的数量
zcard [zset] 返回zset中元素的个数
zscore [zset] ‘value’ 返回值为value的元素的score
zremrangebyrank [zset] start end 删除zset按score从小到大排序索引从start到end的元素。
zremrangebyscore [zset] score1 score2 删除zset中score在score1到score2之间的元素

redis 常用命令

1. 键值相关命令

命令 介绍 返回值
keys [pattern] 查询满足pattern的键 pattern如 *表示任意一个或多个字符,?表示任意字符,[a-z]表示a-z中任意一个字母 满足条件的键
exits [key] 判断一个key是否存在 1存在,0不存在
del [key…] 删除一个或多个key 删除的数量
expire [key] second 设置一个key的过期时间,以秒为单位 1设置成功,0key不存在或不能被设置
expireat [key] timestamp 设置在时间戳timestamp过期 1设置成功,0key不存在或不能被设置
ttl [key] 查取key的有效时长 返回时长,如果该键不存在或没有超时设置,则返回-1
move [key] database 将当前数据库中的key移动到其他数据库database中 1成功,0失败
persist [key] 移除给定key的过期时间 1成功,0没有该key或没有过期时间
randomkey 随机获取key空间中的一个 一个随机获取的key
rename [key] newkey 重命名 key ,如果newkey已存在则覆盖 如果key不存在则返回错误信息,否则返回OK
renamenx [key] newkey 如果newkey存在,则失败且返回0。其它条件和RENAME一致。 1表示修改成功,否则0。
type [key] 查询key的类型 key类型

2. 服务器相关命令

命令 介绍
select database 选择数据库(Redis 数据库编号从 0~15)
quit 退出
echo msg 打印msg
dbsize 返回当前数据库中 key 的数目`
info 获取服务器的信息和统计
flushdb 删除当前选择数据库中的所有 key
flushall 删除所有数据库中的所有 key
时间: 2024-08-13 01:15:54

Redis数据介绍与指令大全的相关文章

PHP导出Redis数据到另一个Redis中的方法

 这篇文章主要介绍了使用PHP导出Redis数据到另一个Redis中的方法,需要的朋友可以参考下 从某个 Redis db 导出数据到另一个 Redis db 的PHP脚本:   代码如下:$from = '127.0.0.1:6200/6'; $to   = '127.0.0.1:6200/8';   $from_redis = redis_init($from); $to_redis   = redis_init($to);   $keys  = $from_redis->keys('*')

Redis和nosql简介,api调用;Redis数据功能(String类型的数据处理);List数据结构(及Java调用处理);Hash数据结构;Set数据结构功能;sortedSet(有序集合)数

1.Redis和nosql简介,api调用 14.1/ nosql介绍   NoSQL:一类新出现的数据库(not only sql),它的特点: 1.  不支持SQL语法 2.  存储结构跟传统关系型数据库中的那种关系表完全不同,nosql中存储的数据都是KV形式 3.  NoSQL的世界中没有一种通用的语言,每种nosql数据库都有自己的api和语法,以及擅长的业务场景 4.  NoSQL中的产品种类相当多: a)        Mongodb  文档型nosql数据库,擅长做CMS系统(内

NoSQL数据库之Redis数据库:Redis的介绍与安装部署

 NoSQL(NoSQL = Not Only SQL),它指的是非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显的力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展.   NoSQL的特点: 特点一: 是以key-value形式存储,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求,比如说遵循SQL标准.ACID属性.表结构等等

Redis初级介绍

1 什么是Redis Redis(REmote DIctionary Server,远程数据字典服务器)是开源的内存数据库,常用作缓存或者消息队列. Redis的特点: Redis存在于内存,使用硬盘作为持久化:每秒十万读写. 具有丰富的数据结构,字符串.哈希表.列表.集合.有序集合:提供交集.并集.差集等操作. 设置TTL存活时间,到期自动删除. Redis单线程.Memcached多线程:对于一般的应用场景,单线程也足够使用,优势还是在于多数据类型.持久化. 可以将数据复制到任意数量的从服务

ApsaraDB for Redis(阿里云redis) 如何导出redis数据?

问题描述 ApsaraDB for Redis(阿里云redis) 如何导出redis数据? ApsaraDB for Redis(阿里云redis) 如何导出redis数据? 需求直接把所有数据复制到我本地redis,设置主从不行,求办法

Redis数据清除问题

Redis中数据清除可以分为两种方式  手动清除:指定要清除的key,通过delete命令即可清除  自动清除:使用Redis提供的数据过期策略 Redis数据过期策略      redis提供了非常灵活的数据自动清除策略,通过简单配置即可实现,以下是具体的策略: noeviction:达到内存限制时返回报错  allkeys-lru:对所有的key采用 (LRU) 算法移除.  volatile-lru: 仅对设置过期时间的key采用(LRU)算法移除.  allkeys-random: 对所

Redis数据过期和淘汰策略详解

背景 Redis作为一个高性能的内存NoSQL数据库,其容量受到最大内存限制的限制. 用户在使用阿里云Redis时,除了对性能,稳定性有很高的要求外,对内存占用也比较敏感.在使用过程中,有些用户会觉得自己的线上实例内存占用比自己预想的要大. 事实上,实例中的内存除了保存原始的键值对所需的开销外,还有一些运行时产生的额外内存,包括: 垃圾数据和过期Key所占空间 字典渐进式Rehash导致未及时删除的空间 Redis管理数据,包括底层数据结构开销,客户端信息,读写缓冲区等 主从复制,bgsave时

老司机的 redis 数据迁移笔记

老服务器上内存一直报警,所以要把一部分redis数据迁移到新服务器上去. 迁移的方式有两种,一种是停服务器,搬迁数据:另一种通过主从同步转移. 停服务器,搬迁数据 首先在原服务器上执行redis-cli shutdown命令,该命令会触发保证写RDB文件以及将AOF文件写入磁盘,不会丢失数据. 如果是kill -9 pid就会丢失数据. 然后将RDB文件和AOF文件都拷贝到新服务器上,注意需要与redis.conf文件中指定RDB文件名和AOF文件名匹配. 最后在新服务器上启动redis服务器.

jedis、redis数据设置问题

问题描述 jedis.redis数据设置问题 最近工程在使用JEDIS工具,有一种场景,不知道如何解决,求帮助,现描述场景如下: 需要在缓存中扔入一个LIST,而LIST下的每一个对象都设置不同的有效期限,即下次需要统计该LIST个数时,自动取所有的有效数据,如: LIST 对象L 有A.B.C三个子对象,其中A对象设置有效时间为一分钟,B.C对象设置有效时间为十分钟,设置完成一分钟后,取LIST时返回为两个子对象,求解决方法,谢谢.(注:不好意思,手头没分了...) 解决方案 征服 Redis