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 入门指南》