1 Redis入门
1.1 什么是Redis
概念:Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。
特征:
(1)数据间没有必然的关联关系;
(2)内部采用单线程机制进行工作;
(3)高性能。官方提供测试数据,50个并发执行100000 个请求,读的速度是110000 次/s,写的速度是81000次/s。
(4)多数据类型支持
字符串类型,string list
列表类型,hash set
散列类型,zset/sorted_set
集合类型 set
有序集合类型 sortedset
(5)支持持久化,可以进行数据灾难恢复
1.2 Redis 的应用场景
缓存(数据查询、短连接、新闻内容、商品内容等待)
聊天室的在线好友列表
任务队列。(秒杀、抢购。12306等等)
应用排行榜
网站访问统计
数据过期处理(可以精确到毫秒)
分布式集群架构中的session分离
2 Redis 的数据类型
2.1 Redis 的5种数据类型
Redis 是一种高级的 key-value 的存储系统,其中value 支持五种数据类型
字符串(String)
哈希(hash)
字符串列表(list)
字符串集合(set)
有序字符串集合(sorted set)
关于 key 的定义,注意如下几点
key 不要太长,最好不要操作1024个字节,这不仅会消耗内存,还会降低查找效率
key 不要太短,如果太短会降低 key 的可读性
在项目中,key 最好有一个统一的命名规范
2.2 字符串类型 String
字符串类型是 Redis 中最为基础的数据存储类型,它在 Redis 中是二进制安全地,这边意味着该类型存入和获取的数据相同。在 Redis中,字符串类型的 Value 最多可以容纳的数据长度是512M
2.2.1常用命令
set key value
设定 key 持有指定的字符串 value,如果该 key 存在则进行覆盖操作。总数会返回 "OK"
get key
获取 key 的value。如果与该 key 存在关联的 Value 不是 String 类型,Redis 将返回错误信息,因为 get 命令只能用于获取 String value;如果该key不存在则返回(nil)
del key
删除指定 key
incr 自增
decr 自减
incrby key step 自增步数
decrby key step 自减步数
2.3 哈希类型 hash
常用命令
hset key filed value
为指定的 key 设定 field/value (键值对)
hget key filed
返回指定的 Key 中的field的值
hdel key field [field ... ]
可以删除一个或多个字段,返回值是被删除的字段个数
hgetall key
可以获取该键的所有数据
2.4 列表类型 list
常用命令
lpush key values[value1 value2 ...]
在指定的key锁关联的list 的头部插入所有的values,如果该key不存在,该命令在插入的之前创建一个与该 key 关联的空链表,之后再向该链表的头部插入数据。插入成功,返回元素的个数
lpop key
返回并弹出指定的key 关联表中的第一个元素,即头部元素。如果该key不存在,返回nil;若key存在,则返回链表的头部元素
rpop key
从尾部弹出元素
lrange key start end
遍历该键的所有数据
2.5 集合类型 set
常用命令
sadd key values[value1 value2 ... ]
向set中添加数据,如果该key的值已有则不会重复添加
smembers key
获取set中所有的成员
srem key members[member1 member2 ... ]
删除set中指定的成员
2.6 有序集合类型 sortset
常用命令
zadd key values[value1 value2 ... ]
向set中添加成员
zrem key value
移除set中的成员
zrange key start end
通过索引区间返回有序集合指定区间内的成员
3 Redis 的通用命令
keys pattern
获取所有与pattern匹配的key,返回所有与该key匹配的key。 * 表示任意一个或多个字符,?表示任意一个字符
del key1 key2...
删除指定的 key
exists key
判断该key是否存在,1代表存在,0代表不存在
type key
获取指定key的类型。该命令将以字符串的格式返回。返回的字符串为string、list、set、hash,如果可以不存在返回none