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和value127.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