Redis简介
什么是Redis
Redis是用C语言开发的一个开源的高性能键值对key-value
数据库,官方提供测试数据,50
个并发执行100000
个请求,读的速度是110000次/s
,写的速度是81000次/s
,且Redis
通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis
支持的键值数据类型如下:
1) 字符串类型 string
2) 哈希类型 hash : map格式
3) 列表类型 list : linkedlist格式。支持重复元素
4) 集合类型 set : 不允许重复元素
5) 有序集合类型 sortedset:不允许重复元素,且元素有
Redis的应用场景
- 缓存(数据查询、短连接、新闻内容、商品内容等等)
- 聊天室的在线好友列表
- 任务队列。(秒杀、抢购、12306等等)
- 应用排行榜
- 网站访问统计
- 数据过期处理(可以精确到毫秒
- 分布式集群架构中的session分离
Nosql
NoSQL(NoSQL = Not Only SQL)
,意即“不仅仅是SQL
‘’,是一项全新的数据库理念,泛指非关系型的数据库。
主流的Nosql数据库:
- 键值
(Key-Value)
存储数据库
相关产品:Tokyo Cabinet
/Tyrant
、Redis
、Voldemort
、Berkeley DB
典型应用: 内容缓存,主要用于处理大量数据的高访问负载。
数据模型: 一系列键值对
优势: 快速查询
劣势: 存储的数据缺少结构化 - 列存储数据库
相关产品:Cassandra
,HBase
,Riak
典型应用:分布式的文件系统
数据模型:以列簇式存储,将同一列数据存在一起
优势:查找速度快,可扩展性强,更容易进行分布式扩展
劣势:功能相对局限 - 文档型数据库
相关产品:CouchDB
、MongoDB
典型应用:Web
应用(与Key-Value
类似,Value
是结构化的)
数据模型: 一系列键值对
优势:数据结构要求不严格
劣势: 查询性能不高,而且缺乏统一的查询语 - 图形
(Graph)
数据库
相关数据库:Neo4J
、InfoGrid
、Infinite Graph
典型应用:社交网络
数据模型:图结构
优势:利用图结构相关算法。
劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案
Redis命令操作
字符串类型String
- 存储:
set key value
127.0.0.1:6379> set username zhangsan
OK
- 获取:
get key
127.0.0.1:6379> get username
"zhangsan"
- 删除:
del key
127.0.0.1:6379> del age
(integer) 1
哈希类型Hash
- 存储:
hset key field value
127.0.0.1:6379> hset myhash username lisi
(integer) 1
127.0.0.1:6379> hset myhash password 123
(integer) 1
- 获取:
hget key field
: 获取指定的field对应的值
127.0.0.1:6379> hget myhash username
"lisi"
hgetall key
:获取所有的field和value
127.0.0.1:6379> hgetall myhash
1) "username"
2) "lisi"
3) "password"
4) "123"
- 删除:
hdel key field
127.0.0.1:6379> hdel myhash username
(integer) 1
列表类型List
- 添加:
-
lpush key value
: 将元素加入列表左表 -
rpush key value
:将元素加入列表右表
127.0.0.1:6379> lpush myList a
(integer) 1
127.0.0.1:6379> lpush myList b
(integer) 2
127.0.0.1:6379> rpush myList c
(integer) 3
- 获取:
lrange key start end
:范围获取
127.0.0.1:6379> lrange myList 0 -1
1) "b"
2) "a"
3) "c"
3.删除
-
lpop key
: 删除列表最左边的元素,并将元素返回 -
rpop key
: 删除列表最右边的元素,并将元素返回
集合类型 Set
- 存储:
sadd key value
127.0.0.1:6379> sadd myset a
(integer) 1
127.0.0.1:6379> sadd myset a
(integer) 0
- 获取:
smembers key
:获取set集合中所有元素
127.0.0.1:6379> smembers myset
1) "a"
- 删除:
srem key value
:删除set集合中的某个元素
127.0.0.1:6379> srem myset a
(integer) 1
有序集合类型 Sortedset
不允许重复元素,且元素有顺序。每个元素都会关联一个double
类型的分数。redis
正是通过分数来为集合中的成员进行从小到大的排序。
- 存储:
zadd key score val
127.0.0.1:6379> zadd mysort 60 zhangsan
(integer) 1
127.0.0.1:6379> zadd mysort 50 lisi
(integer) 1
127.0.0.1:6379> zadd mysort 80 wangwu
(integer) 1
- 获取:
zrange key start end [withscores]
127.0.0.1:6379> zrange mysort 0 -1
1) "lisi"
2) "zhangsan"
3) "wangwu"
127.0.0.1:6379> zrange mysort 0 -1 withscores
1) "zhangsan"
2) "60"
3) "wangwu"
4) "80"
5) "lisi"
6) "50"
- 删除:
zrem key value
127.0.0.1:6379> zrem mysort lisi
(integer) 1
通用命令
-
keys *
: 查询所有的键 -
type key
: 获取键对应的value
的类型 -
del key
:删除指定的key val