Redis的学习
Redis简介
NoSQL
-
关系型数据库:Oracle,MySQL,DB2(表结构,主外键)
-
非关系型数据库四大类:
-
键值(key-value)存储数据库:Redis
-
列存储数据库:HBase(大数据)
-
文档型数据库:MongoDB
-
图形(Graph)数据库:Neo4J
Redis主要用于数据缓存,为什么?
-
数据库做存储每次写进去或拿出来,都必须建立连接,执行sql,把数据从服务器拿过来使用,再断掉连接.
-
现在的程序结构:计算机中有Tomcat(web服务器)和Oracle(数据库服务器),浏览器请求Tomcat,Tomcat访问Oracle,Oracle返回Tomcat,Tomcat响应浏览器
-
一个计算机既要承担web服务器,又要数据库服务器,如果配置低,效率就会比较低,所以就把数据库拿出来单独用一台机器
-
Redis是完全借助内存的,Oracle是把数据存在磁盘中,从Oracle中读数据就要把数据载入到内存中,从内存给到程序,所以Redis是非常快的
-
所以用Redis做缓存,先去Redis中找数据,没有再去Oracle服务器中找
-
查询频率高的用缓存,更新操作多的不用
什么是Redis
-
Redis是一个开源的,先进的key-value存储可用于构建高性能,可扩展的web应用程序的解决方案(key-value结构查找复杂度低,查询速度最快的)(Oracle是表结构,表里多行多列,字段值可以有多种类型)
-
Redis可看做”内存中的数据结构服务器”.目前Redis支持列表、集合、可排序集合、哈希等数据结构(指的是value值可以有多种类型)
-
Redis支持多种语言,诸如Java、PHP、Ruby、Python、lua等
-
Redis的官方网站是:http://www.redis.io/ (点安装目录的redis-cli.exe登录进来)
Redis的优点
-
异常快速:每秒可以执行大约110000设置操作,81000个读取操作(同步:发请求回调发请求回调发请求回调;异步:发请求发请求发请求回调回调回调)
-
支持丰富的数据类型,例如列表,集合,可排序集合,哈希等数据类型
-
支持数据的持久化,Redis提供了一些策略将内存中的数据异步地保存到磁盘上,比如根据时间或更新次数(内存存储不安全,一断电就全没了)
-
Redis是一个多功能实用工具,具有缓存、消息传递等功能
各种类型数据存储命令(redis-cli启动服务)
1. 字符串操作
value是string
-
在指定键设置值
SET key value
value值中有空格时必须加引号 -
获取键对应的值
GET key
-
设置键的字符串值,并返回旧值
GETSET key value
-
得到存储在键得到值的长度
STRLEN key
-
设置多个键和多个值
MSET key value [key value ...]
-
键的整数值加1
INCR key
-
键的整数值加value
INCRBY key value
-
键的整数值减1
DECR key
-
键的整数值减value
DECRBY key value
-
为原来键值追加value
APPEND key value
返回值是value的长度
2. key操作
key是string
-
删除键,如果存在
DEL key
-
检查该键是否存在
EXISTS key
-
指定键的过期时间
EXPIPE key seconds
如:session默认过期时间30分钟,也可以把键的过期时间设为30分钟,用Redis存储session数据做session用 -
设置键以毫秒为单位到期
PEXPIRE key milliseconds
-
移除过期的键
PERSIST key
-
查找与指定模式匹配的所有键
KEYS pattern
pattern是表达式,如KEYS *
就是查询所有所有的键 -
该命令返回存储在指定键的值得序列化结果
DUMP key
-
从Redis返回随机键
RANDOMKEY
-
更改键的名称
RENAME key newkey
-
返回存储在键的值的数据类型
TYPE key
-
以毫秒为单位获取剩余时间的到期键
PTTL key
-
获取键到期的剩余时间
TTL key
3. 哈希操作
value是hash:字段名1 字段值1 字段名2 字段值2…
-
设置多个哈希字段的多个值
HMSET key field1 value1 field2 value2
-
设置哈希字段的字符串值
HSET key field value
-
获取存储在指定的键散列字段的值
HGET key field
-
获取所有给定的哈希字段的值
HMGET key field1 [field2]
-
统计字段数量
HLEN key
-
获取所有哈希表中的字段
HKEYS key
-
删除一个或多个哈希字段
HDEL key field2 [field]
-
判断一个哈希字段存在与否
HEXISTS key field
4. 列表操作
value是list:string1 string2…
Redis列表是简单的字符串列表,按插入顺序排序.您可以在头部或列表的尾部给列表添加元素
既可以模拟队列又可以模拟栈
-
在前面加上一个或多个值的列表
LPUSH key value1 [value2]
列表不存在自动创建一个 -
在末尾加上一个或多个值得列表
RPUSH key value1 [value2]
列表不存在自动创建一个 -
返回存储在key列表的特定元素
LRANGE key start stop
0是第一个元素(该列表的头部),1是列表的下一个元素,-1是列表的最后一个元素,-2是倒数第二个 -
获取列表的长度
LLEN key
-
从头部删除一个元素,并返回该删除的元素
LPOP key
-
从尾部删除一个元素,并返回该删除的元素
RPOP key
-
对列表元素剪切,保留指定key范围内的数据
LTRIM key begin end
-
从一个列表其索引获取对应的元素
LINDEX key index
-
在前面加上一个值列表
LPUSHX key value
仅当列表中存在,不成功返回0 -
在末尾加上一个值列表
RPUSHX key value
仅当列表中存在,不成功返回0 -
移除等于value的元素
LREM key count value
当count>0时,从表头开始查找,移除count个;
当count=0时,从表头开始查找,移除等于value的;
当count<0时,从表尾开始查找,移除|count|个 -
将值插入到pivot的前面或后面
LINSERT key BEFORE|AFTER pivot value
如果有多个pivot,以离表头最近的为准 -
设置列表指定索引的值
LSET key index value
如果索引不存在则报错
5. 集合操作
value是set:string1 string2…
集合成员是无序的,唯一的,不重复的
可用来随机取卷
-
向集合增加元素
SADD key member [member...]
-
从集合删除元素
SREM key member [member...]
-
获得集合中的所有元素
SMEMBERS key
-
判断元素是否在集合中
SISMEMBER key member
-
获得集合中元素的个数
SCARD key
-
随机获得集合中的元素
SRANGMEMBER key [count]
-
从列表中弹出一个元素
SPOP key
弹出元素被删除,不在原来的集合中 -
差集
SDIFF key [key...]
-
交集
SINTER key [key...]
-
并集
SUNION key [key...]
-
将第一个集合元素value移动到第二个集合中
SMOVE key1 key2 value
-
执行差集运算并存储到另一个set中
SDIFFSTORE key key1 key2
-
执行并集运算并存储到另一个set中
SINTERSTORE key key1 key2
-
执行并集运算并存储到另一个set中
SUNIONSTORE key key1 key2
6. 有序集合操作
value是set:string1 string2…
集合成员是有序的,唯一的,value不可重复,分数(score)是可以重复的
每个元素都会关联一个double类型的分数.Redis通过分数来为集合中的成员进行从小到大的排序.
可以用来统计成绩
-
向有序集合添加一个或多个成员,或者更新已存在成员的分数
ZADD key score1 member1 [score2 member2]
-
获取有序集合的成员数
ZCARD key
-
计算在有序集合中指定区间分数的成员数
ZCOUNT key min max
-
获得元素的分数
ZSCORE key member
-
通过索引区间返回有序集合指定区间内的成员(小到大)
ZRANGE key start stop [WITHSCORES]
-
通过索引区间返回有序集合指定区间内的成员(大到小)
ZREVRANGE key start stop [WITHSCORES]
-
根据排序索引的score来返回元素
ZRANGEBYSCORE key score1 score2
-
返回元素在集合中的排序位置,就是索引值
ZRANK key member
-
返回有序集合中指定成员的排名
ZREVRANK key member
有序集成员按分数值递减(从大到小)排序 -
删除名称为key的zset中的元素member
ZREM key member
-
增加一个元素的分数,返回值是更改后的分数
ZINCRBY key number member
-
按照元素分数从小到大顺序删除指定范围内所有的元素
ZREMRANGEBYRANK key start stop
-
删除集合中在给定排序区间的元素(按score)
ZREMRANGESCORE key min max