Redis学习(一)

   Redis是一个开源的key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串),list(链表),set(集合),zset(sorted set --有序集合)和hash(哈希类型)。数据类型支持push、pop,add/move 及取交集和并集和差集及更丰富的操作,而且操作都是原子性

一、主要的功能和实现的技术

Redis学习(一)

二、Redis基本命令 

keys  *  :查询当前数据库所有的键

exists <key> :判断当前数据库是否有某个键

type <key> :查看键对应的数据类型

del <key>:删除某个键

expire <key> <seconds>:为键设定过期时间

ttl <key> :查询键还有多久过期,-1表示永不过期,-2表示已经过期

dbsize :查询当前库的键数量

Flushdb :清空当前库

Flushall :通杀全部库

get <key>:查询对应键值

set <key> <value> :添加键值对

append <key> <value> :将给定的<value>追加到原值的末尾

strlen<key>:获得值的长度

setnx <key> <value>:只有在key不存在的时候设置key的值

incr <key>: 将key中存储的数值增加1.(只能对数值操作)

decr <key> :将key中存储的数值减1.(只能对数值操作)

incrby / decrby <key> <步长> :将key中存储的数值增减.自定义步长

mset <key1> <value1> <key2> <value2> ....:同时设置一个或多个key-value

mget <key1> <key2> <key3> :同时获取一个或多个value的值

msetnx <key1> <value1> <key2> <value2> ...:同时设置一个或多个key-value对,当且仅当所有给的的key都不存在

getrange <key> <起始位置> <结束位置> :获得值的范围,类似java中的substring

setrange <key> <起始位置> <value> :用<value>重新存储字符串值,从<起始位置>开始

setex <key> <过期时间> <value>:设置键值的同时设置过期时间

getset <key> <value>:以新换旧,设置了新值的同时获得旧值

三、Redis的基本数据类型

1、String类型

String类型:是Redis最基本的类型。

String类型是二进制安全的。意味着Redis的String可以包含任何数据。比如jpg图片或者序列化的对象。

String类型中一个Redis中字符串value最多可以是512M。

2、List类型

单键多值

Redis列表是简单的字符串列表,按照char顺序排序,你可以添加一个元素导列表的头部(左边)或者尾部(右边).

它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差

Redis学习(一)

对List数据类型的操作:

Ipush/rpush <key> <value1> <value2> <value3>..:从左边/右边char一个或者多个值

Ipop/rpop <key> :从左边/右边吐出一个值.值在健在,值亡键亡

rpoplpush <key1> <key2> :把<key1> 列表右边吐出一个值,插入到<key2>左边

lrange <key> <start> <stop> :按照索引下标获得元素(从左到右)

lindex <key> <index> :按照索引下标获得元素(从左到右)

llen <key> :获得列表的长度

linsert <key> before <value> <newvalue> :在<value> 的后面插入<newvalue>插入值

lrem <key> <n> <value> :从左边删除n个value(从左到右)

3、set数据类型

Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以制动排重的,当你需要存储一个列表数据又不希望出现重复数据时,sert是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。

Redis的Set是string类型的无序集合,它底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是O(1)。

sadd <key> <value1> <value2> ....:将一个或多个member元素加入到集合 key 当已经存在于集合的member元素将被忽略.

smembers <key> :取出改集合的所以值

sismember <key> <value> :判断集合<key> 是否为含有该<value>值,没有返回0

scard <key> :返回该集合的元素个数

srem <key> <value1> <value2> ...:删除集合中的某个元素

spop <key> :随机从该集合中吐出一个值

srandmember <key> <n> :随机从该集合中取出n个值,不会从集合中删除

sinter <key1> <key2> :返回两个集合的交集元素

sunion <key1> <key2> :放回两个集合的并集

sdiff <key1> <key2> :放回两个集合的差集元素

4、hash数据类型

Redis hash是一个键值对的集合

Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象

类似java里面的Map<String , String>

hset <key> <field> <value>:给<key>集合中的<field> 键赋值<value>

hget <key1> <field> :从<key1>集合<field>取出value

hmset <key1> <field1> <value1> <field2> <value2>:批量设置hash的值

hexists key <field> :查看哈希表key中,给定域field是否存在

hkeys <key> :列出该hash集合的所以field

hvals <key> : 列出该hash集合的所有value

hincrby <key> <field> <increment> :为哈希表key中的域field的值加上增量increment

hsetnx <key> <field> <value>:将哈希表key中的域field的值设置为value 

5.zset数据类型

  Redis有序集合zset与普通集合set非常相似, 是一个没有充分元素的字符串集合,不用之处是有序集合的美国撑腰都观看了一个评分(score) ,这个评分(score)被用来按照从最近分到最高分的方式排序集合中的成员.集合的成员是唯一的,但是评分可以是重复了.

zadd <key> <score1> <value1> <score2> <value2>:将一个或多个member 元素及其score值加入

zrange <key> <start> <stop> :放回有序集key中

zrangebyscore key min max:放回有序集key中,所以score值介于min和max之间的成员,有序集成员按score值递增次序排列

zincrby <key> <increment>  <value>:为元素的score加上的增量

zcount <key> <min> <max> :统计该集合,分数区间内的元素个数

zrank <key> <value> :放回改值在集合中的排名,从0开始