Redis介绍
Redis 是 REmote Dictionary Server 的缩写, 它以字典存储结构,并允许其它应用通过TCP协议读写字典中的内容。
优势
1.数据存储形式和程序中的存储形式很相近。
2.对不同数据类型提供方便的操作方式
redis提供多个数据库(默认16),每个数据库以编号命名
(不可修改),权限统一,数据库之间不完全隔离。
redis可设置生存时间,设置占用内存空间,可修改源码
命名键规则(对象类型:对象ID:对象属性)
redis命令返回值:
1.状态回复 ping-pong
set-ok
2.错误回复 error
3.整数回复
4.字符串回复
5.多行字符串回复
支持的键值数据类型:
字符串类型 string
散列类型 hash
列表类型 list
集合类型 set
有序集合类型 zset
Redis基础
(Redis命令不区分大小写)
用途 | 命令 |
---|---|
linux连接 | redis-cli |
获得符合规则的键名列表 | KEYS pattern |
判断一个键是否存在 | EXISTS key |
删除键 (返回删除个数) | DEL key [key …] |
获得键值的数据类型 | TYPE key |
字符串类型 (string)
用途 | 命令 |
---|---|
获得/设置键值 | SET key value |
GET key | |
增加指定的整数 | INCR key |
INCRBY key increment | |
减少指定的整数 | DECR key |
DECRBY key decrement | |
增加指定的浮点数 | INCRBYFLOAT key increment |
向尾部追加值 | APPEND key valuere |
获取字符串长度 | STRLEN key |
同时获得/设置多个键值 | MGET key [key …] |
MSET key value [key value…] | |
位设置 | GETBIT key offset |
SETBIT key offset value | |
位计算 | BITCOUNT key [start] [end] |
位运算 | bitop operation destkey key [key …] |
散列类型(hash)
适合存储对象
用途 | 命令 |
---|---|
赋值与取值(更新操作返回0) | HSET key field value |
HGET key field | |
HMSET key field value [field value…] | |
HMGET key field [field…] | |
HGETALL key | |
判断字段是否存在 | HEXISTS key field |
当字段不存在时赋值 | HSETNX key field value |
增加数字 | HINCRBY key field increment |
删除字段 | HDEL key field [field …] |
只获取字段名或字段值 | HKEYS key |
HVALS key | |
获得字段数量 | HLEN key |
列表类型(list)
存储有序的字符串列表
越接近两端,访问速度越快。
通过索引访问元素较慢
可模拟栈和队列
用途 | 命令 |
---|---|
向列表两端增加元素,返回增加元素后列表的长度 | LPUSH key value [value …] |
RPUSH key value [value …] | |
从列表两端弹出元素 | LPOP key |
RPOP key | |
获取列表中元素的个数 | LLEN key |
获得列表片段,支持负索引 | LRANGE key start stop |
删除列表中指定的值,返回删除的元素个数 | LREM key count value |
获得/设置指定索引的元素值 | LINDEX key index |
LSET key index value | |
只保留列表指定片段,删除其它元素 | LTRIM key start end |
向列表中插入元素 | LINSERT key BEFORE/AFTER pivot value |
将元素从一个列表转到另一个列表 | RPOPLPUSH source destination |
集合类型(set)
无序,唯一
利用散列表存储,拉链法解决冲突
用途 | 命令 |
---|---|
增加/删除元素 | SADD key member [member …] |
SREM key member [member …] | |
获得集合中的所有元素 | SMEMBERS keys |
判断元素是否在集合中 | SISMEMBER key member |
集合间运算 | SDIFF key [key …] |
SINTER key [key …] | |
SUNION key [key …] | |
获取集合中的元素个数 | SCARD key |
进行集合运算并将结果存储 | SDIFFSTORE destination key [key …] |
SINTERSTORE destination key [key …] | |
SUNIONSTORE destination key [key …] | |
随机获得集合中的元素 | SRANDMEMBER key [count] |
从集合中弹出一个元素 | SPOP key |
有序集合(sorted set)
常用于大数据排序,很少需要键中所有数据。
与列表对比
相同:
(1)二者都是有序的
(2)二者都可以获得某一范围元素
区别:
(1)列表通过链表实现,有序集合通过散列表和跳跃表实现
(2)列表不能简单调整某个元素位置,有序集合可通过更改分数实现
(3)有序集合更耗内存
用途 | 命令 |
---|---|
增加元素 | ZADD key score member [score member] |
获得元素的分数 | ZSCORE key member |
获得排名在某个范围的元素列表 (ZRANGE从大到小,ZREVRANGE反之) | ZRANGE key start stop [WITHSCORES] |
ZREVRANGE key start stop [WITHSCORES] | |
获得指定分数范围的元素 | ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] |
增加某个元素的分数 | ZINCRBY key increment member |
获得集合中元素的数量 | ZCARD key |
获得指定分数范围内的元素格式 | ZCOUNT key min max |
删除一个或多个元素 | ZREM key member [member …] |
按照排名范围删除元素 | ZREMRANGEBYRANK key start stop |
按照分数范围删除元素 | ZREMRANGEBYSCORE key start stop |
获得元素的排名 | ZRANK key member |
ZREVRANK key member | |
计算有序集合的交集 | ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]][AGGREGATE SUM |
Redis事务(学习ing…)
Redis中的事务是一组命令的集合。Redis保证事物中的命令要么都执行,要么都不执行,同时一个事务内的命令依次执行且不被其他命令插入。
事务采用队列来实现。
MULTI 开启事务后,若因断线没有成功执行EXEC,那事务中的所有命令都不会执行。如果成功执行EXEC那命令都会执行。
语法错误将直接返回错误,所有命令都不执行。
运行错误则会跳过错误继续执行。
Redis不支持回滚。
WATCH 监控一个键或多个键,一旦其中有一个键被更改,事务不会执行。 监控持续到EXEC。
UNWATC 取消监控
EXPIRE key seconds 设置键的生存时间,到时间后自动删除(PXPIRE 毫秒)
(RXPIREAT PEXPIREAT 使用Unix时间)
TTL key 返回键的剩余时间
PERSIST 取消键的生存时间 (利用SET 或 GETSET 同样可清除)
实现访问频率限制
1.递增键值,限制次数。固定时间删除键
2.记录访问时间,超出次数,则计算与最近的访问时间差值。如果在限制条件内则删除最早元素。
缓存:可利用生存时间实现(可修改配置文件的maxmemory 修改最大内存 )
SORT key [ALPHA] [DESC] [LIMIT OFFSET COUNT]
排序(ALPHA根据字典数据 DESC 从大到小排列)
BY 参考键
GET 参数
STORE 参数
Redis 脚本(学习ing…)
Redis参考书
《Redis 入门指南》