基本数据类型(五种)
(List,Set,Hash,Zset,String)
Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。
Redis key
在redis中无论什么数据类型,在数据库中都是以key-value形式保存,通过进行对Redis-key的操作,来完成对数据库中数据的操作。
基本命令:
set name yujiangyue #set key
keys * # 查看当前数据库所有key
exists key: #判断键是否存在 (EXISTS name)
del key: #删除键值对
move key db: #将键值对移动到指定数据库
expire key second:#设置键值对的过期时间(单位:秒)
ttl name #查看过期剩余秒数
type key: #查看value的数据类型
String类型
APPEND key value #向指定的key的value后追加字符串
DECR/INCR key #将指定key的value数值进行+1/-1(仅对于数字)
INCRBY/DECRBY key n # 按指定的步长对数值进行加减
STRLEN key #获取key保存值的字符串长度
GETSET key value #将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
List类型
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
LPUSH/RPUSH key value1[value2..] #从左边/右边向列表中PUSH值(一个或者多个)。
LRANGE key start end # 获取list 起止元素
LPUSHX/RPUSHX key value # 向已存在的列名中push值(一个或者多个)
LINSERT key BEFORE|AFTER pivot value #在指定列表元素的前/后 插入value
LLEN key #查看列表长度
LINDEX key index # 通过索引获取列表元素
LSET key index value #通过索引为元素设值
LPOP/RPOP key #从最左边/最右边移除值 并返回
小结:
- list实际上是一个链表,中间,左边,右边都可以插入值
- 如果key不存在,则创建新的链表
- 如果key存在,新增内容
- 如果移除了所有值,空链表,也代表不存在
- 在两边插入或者改动值,效率最高!修改中间元素,效率相对较低。
应用:
消息排队!消息队列(Lpush Rpop),栈(Lpush Lpop)
Set(集合)类型
Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
SADD key member1[member2..] #向集合中无序增加一个/多个成员
SCARD key #获取集合的成员数
SMEMBERS key #返回集合中所有的成员
SISMEMBER key member #查询member元素是否是集合的成员,结果是无序的
SRANDMEMBER key [count] #随机返回集合中count个成员,count缺省值为1
SPOP key [count] #随机移除并返回集合中count个成员,count缺省值为1
SMOVE source destination member #将source集合的成员member移动到destination集合
SREM key member1[member2..] #移除集合中一个/多个成员
SDIFF key1[key2..] #返回所有集合的差集 key1- key2 - …
SINTER key1 [key2..] #返回所有集合的交集
SINTERSTORE destination key1[key2..] #在SINTER的基础上,存储结果到集合中。覆盖
SUNION key1 [key2..] #返回所有集合的并集
SUNIONSTORE destination key1 [key2..] #在SUNION的基础上,存储结果到及和张。覆盖
SSCAN KEY [MATCH pattern] [COUNT count] #在大量数据环境下,使用此命令遍历集合中元素,每次遍历部分
Hash(哈希)
Redis 中hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
HSET key field value #将哈希表 key 中的字段 field 的值设为 value 。重复设置同一个field会覆盖,返回0
HMSET key field1 value1 [field2 value2..] #同时将多个 field-value (域-值)对设置到哈希表 key 中。
HSETNX key field value #只有在字段 field 不存在时,设置哈希表字段的值。
HEXISTS key field #查看哈希表 key 中,指定的字段是否存在。
HGET key field value #获取存储在哈希表中指定字段的值
HMGET key field1 [field2..] #获取所有给定字段的值
HGETALL key #获取在哈希表key 的所有字段和值
HLEN key #获取哈希表中字段的数量
HVALS key #获取哈希表中所有值
HDEL key field1 [field2..] #删除哈希表key中一个/多个field字段
HINCRBY key field n #为哈希表 key 中的指定字段的整数值加上增量n,并返回增量后结果 一样只适用于整数型字段
Hash更适合于对象的存储,Sring更加适合字符串存储!
Zset(有序集合)类型
不同的是每个元素都会关联一个double类型的分数(score)。redis正是通过分数来为集合中的成员进行从小到大的排序。
score相同:按字典顺序排序
有序集合的成员是唯一的,但分数(score)却可以重复。
127.0.0.1:6379> zadd myset 1 one #添加一个值
(integer) 1
127.0.0.1:6379> zadd myset 2 two 3 three #添加多个值
(integer) 2
127.0.0.1:6379>
127.0.0.1:6379> ZRANGE myset 0 -1
1) "one"
2) "two"
3) "three"
127.0.0.1:6379>
###############################################
127.0.0.1:6379> zadd salary 100 xiaohong
(integer) 1
127.0.0.1:6379> zadd salary 200 zhangsan
(integer) 1
127.0.0.1:6379> zadd salary 300 xiaoyu
(integer) 1
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf
1) "xiaohong"
2) "zhangsan"
3) "xiaoyu"
ZADD key score member1 [score2 member2] #向有序集合添加一个或多个成员,或者更新已存在成员的分数
ZCARD key #获取有序集合的成员数
ZCOUNT key min max #计算在有序集合中指定区间score的成员数
ZINCRBY key n member #有序集合中对指定成员的分数加上增量 n
ZSCORE key member #返回有序集中,成员的分数值
ZRANK key member #返回有序集合中指定成员的索引
ZREVRANGE key start end #返回有序集中指定区间内的成员,通过索引,分数从高到底
ZREMRANGEBYSCORE key min max #移除有序集合中给定的分数区间的所有成员
应用案例:
- set排序
- 排行榜应用实现(成绩排序,工资表排序)