1Redis简介1.Redis:REmoteDIctionaryServer,远程字典服务.2.是一种以keyvalue形式存储数据的内存型数据库.以二进制的形式存放数据,以字符串
1 Redis 简介
1. Redis: REmote DIctionary Server, 远程字典服务.
2. 是一种以key=value形式存储数据的内存型数据库. 以二进制的形式存放数据, 以字符串的形式表现.
3. 内存型数据库的优点: 速度快, 效率高; 缺点: 内存容量较小, 存放数据有限, 字符串而言, 每个字符串最大512M, 断电会导致数据丢失.
4. Redis是一种NoSQL数据库(泛指非关系型数据库), Not only Sql.
5. 关系型数据库和非关系型数据库的区别:
> 关系型数据库: 在DBMS中, 数据的存储是通过关系表的形式存放的, 通过约束进行数据完整性的定义
> 非关系型数据库: 以其他形式存放数据, 常见的有Redis, MongoDB. 在数据高效访问时需要使用.
6. 通常是关系型数据库配合非关系型数据库一起使用.
7. Redis下载资源: http://download.redis.io/releases/
8. Redis的版本信息
奇数版本: 开发版, 不稳定
偶数版本: 正式版, 稳定
在测试时使用哪个版本无所谓, 但是在项目上线时要使用偶数版本.
Redis3.0.0是一个里程碑式的版本. 从3.0.0开始, Redis支持集群. crc16算法
9. Redis支持linux和windows两个版本的安装, windows版本不稳定.
2 Redis 特性
速度快
持久化(断电不丢失数据),支持持久化操作,可以进行 aof 及 rdb 数据持久化到磁盘,从而进行数据备份或数据恢复等操作,较好的防止数据丢失的手段。
支持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash 表)、set(集合)、
zset(排序 set)、hyperloglog(基数估算)
支持多种客户端语言
功能丰富
简单,单机版的Redis有2,3000行C语言代码,单线程
支持通过 Replication 进行数据复制,通过 master-slave 机制,可以实时进行数据的
同步复制,支持多级复制和增量复制,master-slave 机制是 Redis 进行 HA 的重要手段。
高可用,分布式
3 Redis的应用场景
Redis 数据类型
1 String(字符串)
Redis 字符串是字节序列。Redis 字符串是二进制安全的,这意味着他们有一个已知的
长度没有任何特殊字符终止,所以你可以存储任何东西,512 兆为上限
示例:
redis 127.0.0.1:6379> SET name kevin
OK
redis 127.0.0.1:6379> GET name
"kevin"
incr 让当前键值以 1 的数量递增,并返回递增后的值
incrby 可以指定参数一次增加的数值,并返回递增后的值
decr 让当前键值以 1 的数量递减 并返回递减后的值
decrby 可以指定参数一次递减的数值,并返回递减后的值
incrbyfloat 可以递增一个双精度浮点数
append 作用是向键值的末尾追加 value。如果键不存在则将该键的值设置为 value。返
回值是追加后字符串的总长度。
mget/mset 作用与 get/set 相似,不过 mget/mset 可以同时获得/设置多个键的键值
del 根据 key 来删除 value
flushdb 清除当前库的所有数据
2 Hash(hash 表)
Redis 的哈希是键值对的集合。 Redis 的哈希值是字符串字段和字符串值之间的映射,
因此它们被用来表示对象
3 List(链表)
Redis 的链表是简单的字符串列表,排序插入顺序。您可以添加元素到 Redis 的列表的
头部或尾部
示例:
redis 127.0.0.1:6379> lpush tutoriallist redis
(integer) 1
redis 127.0.0.1:6379> lpush tutoriallist mongodb
(integer) 2
redis 127.0.0.1:6379> lpush tutoriallist rabitmq
(integer) 3
redis 127.0.0.1:6379> lrange tutoriallist 0 10
1) “rabitmq”
2) “mongodb”
3) “redis
lpush key value 向链表左侧添加
rpush key value 向链表右侧添加
lpop key 从左边移出一个元素
rpop key 从右边移出一个元素
llen key 返回链表中元素的个数 相当于关系型数据库中 select count(*)
lrange key start end lrange 命令将返回索引从 start 到 stop 之间的所有元素。Redis 的列
表起始索引为 0。
lrange 也支持负索引 lrange nn -2 -1 如 -1 表示最右边第一个元素 -2 表示最右边第二
个元素,依次类推。
lindex key indexnumber 如果要将列表类型当做数组来用,lindex 命令是必不可少的。
lindex 命令用来返回指定索引的元素,索引从 0 开始
如果是负数表示从右边开始计算的索引,最右边元素的索引是-1。
Lset key indexnumber value 是另一个通过索引操作列表的命令,它会将索引为 index
的元素赋值为 value。
4 Set(集合)
Redis 的集合是字符串的无序集合。
示例:
redis 127.0.0.1:6379> sadd tutoriallist redis
(integer) 1
redis 127.0.0.1:6379> sadd tutoriallist mongodb
(integer) 1
redis 127.0.0.1:6379> sadd tutoriallist rabitmq
(integer) 1
redis 127.0.0.1:6379> sadd tutoriallist rabitmq
(integer) 0
redis 127.0.0.1:6379> smembers tutoriallist
1) “rabitmq”
2) “mongodb”
3) “redis”
sadd key value 添加一个 string 元素到,key 对应的 set 集合中,成功返回 1,如果元素已经
在集合中返回 0
scard key 返回 set 的元素个数,如果 set 是空或者 key 不存在返回 0
smembers key 返回 key 对应 set 的所有元素,结果是无序的
sismember key value 判断 value 是否在 set 中,存在返回 1,0 表示不存在或者 key 不存
在
srem key value 从 key 对应 set 中移除给定元素,成功返回 1,如果 value 在集合中不存
在或者 key 不存在返回 0
5 SortedSet(有序集合)zset
Redis 的有序集合类似于 Redis 的集合,字符串不重复的集合。
示例:
redis 127.0.0.1:6379> zadd tutoriallist 0 redis
(integer) 1
redis 127.0.0.1:6379> zadd tutoriallist 0 mongodb
(integer) 1
redis 127.0.0.1:6379> zadd tutoriallist 0 rabitmq
(integer) 1
redis 127.0.0.1:6379> zadd tutoriallist 0 rabitmq
(integer) 0
redis 127.0.0.1:6379> ZRANGEBYSCORE tutoriallist 0 1000
1) “redis”
2) “mongodb”
3) “rabitmq”
zadd key score value 将一个或多个 value 及其 socre 加入到 set 中
zrange key start end 0 和-1 表示从索引为 0 的元素到最后一个元素(同 LRANGE 命令
相似)
zrange key 0 -1 withscores 也可以连同 score 一块输出,使用 WITHSCORES 参数
zremrangebyscore key start end 可用于范围删除操作
6 Redis 中的其他命令
ping 测试 redis 是否链接 如果已链接返回 PONG
echo value 测试 redis 是否链接 如果已链接返回 echo 命令后给定的值
keys * 返回所有的 key 可以加*通配
exists key 判断 string 类型一个 key 是否存在 如果存在返回 1 否则返回 0
expire key time(s) 设置一个 key 的过期时间 单位秒。时间到达后会删除 key 及 value
ttl key 查询已设置过期时间的 key 的剩余时间 如果返回-2 表示该键值对已经被删除
persist 移除给定 key 的过期时间
select dbindex 选择数据库(0-15)
move key dbIndex 将当前数据库中的 key 转移到其他数据库中
dbsize 返回当前数据库中的 key 的数目
info 获取服务器的信息和统计
flushdb 删除当前选择的数据库中的 key
flushall 删除所有数据库中的所有 key
quit 退出连接