Redis的简介与五种数据结构以及常用命令

1.Redis简介

    Redis是一个远程内存数据库,是一个速度特别快的非关系数据库(non-relational database),它可以存储键(key)与5种不同类型的值(value)之间的映射。

1.Redis可以将存储在内存的键值对数据持久化到硬盘

2.可以使用复制特性来扩展读性能

3.还可以使用客户端分片来扩展写性能

注意:分片是一种将数据划分为多个部分的方法,对数据的划分可以基于键包含的ID、基于键的散列值,或者基于以上两者的某种组合。通过对数据进行分片,用户将数据存储在多台机器里,也可用从多台机器中获取数据,这种方法在解决某些问题时可以获得线性级别的性能提升。

1.1.Redis与其他数据库软件对比

    Redis不使用表,它的数据库也不会预定义或者强制要求用户对Redis存储的不同数据进行关联。

名称类型数据存储选项查询类型附加功能
Redis使用内存存储(in-memory)的非关系数据库字符串、列表、集合、散列、有序集合每种数据类型都有自己的专属命令,还有批量操作和不完全的事务支持发布订阅,主从复制,持久化,脚本
memcached使用内存存储的键值对缓存键值之间的映射创建命令,读取命令,更新命令,删除命令以及其他几个命令为提升性能而设的多线程服务器
MySQL关系数据库每个数据库可以包含多个表,每个表可以处理多个行,可以处理多个表的视图,支持空间和第三方扩展select、insert、update、delete、函数、存储过程支持acid性质(需要使用innodb),主从复制和主主复制
postgreSQL关系数据库每个数据库可以包含多个表,每个表可以处理多个行,可以处理多个表的视图,支持空间和第三方扩展,支持定制类型select、insert、update、delete、内置函数、自定义存储过程支持acid性质,主从复制,有第三方支持的多主复制
MongoDB使用硬盘存储的非关系型数据库每个数据库可以包含多个表,每个表可以包含多个scheme的bson文档创建命令、读取命令、更新命令、删除命令、条件查询命令支持map-reduce操作。主从复制,分片,空间suoyi

 

2.Redis的数据结构简介

    Redis可以存储5种不同的数据结构类型之间的映射,这5种数据类型分别为String (字符串)、List(列表)、Set (集合)、Hash(散列)和有序集合ZSet (有序集合)

结构类型结构存储的值结构的读写能力
String可以是字符串、整数或者浮点数对整个字符串或者字符串的一部分执行操作;对整数和浮点数执行自增或者自减
List一个链表,链表上的每个节点都包含了一个字符串从链表的两端推入或者弹出元素,根据偏移量对链表进行修剪,读取单个或者多个元素;根据值查找或者移除元素
Set包含字符串的无序收集器,并且被包含的每个字符串都是独一无二的添加、获取、移除单个元素,检查一个元素是否存在于集合中;计算交集、并集、差集;从集合里面随机获取元素
Hash包含键值对的无序散列增加、获取、移除单个键值对;获取所有键值对
ZSet字符串成员与浮点数分值之间的有序映射,元素的排列顺序由分值的大小决定添加、获取、移除单个元素;根据分值范围或者成员来获取元素

2.1.Redis中的String

    字符串拥有和一些和其他键值存储相似的命令,比如get(查询)、set(获取)、del (删除)

命令行为
get获取值
set 存储值
del删除给定键的值
 ##启动Redis客户端
[root@localhost ~]# redis-cli
##数入密码
127.0.0.1:6379> AUTH 123456
##存储键为hello  值为world
127.0.0.1:6379> set hello world
OK
##获取刚才存入键为 hello的值
127.0.0.1:6379> get hello
"world"
###删除键为hello的值,返回删除的条数
127.0.0.1:6379> del hello
(integer) 1
##因为已经删除,查询已经没有了
127.0.0.1:6379> get hello
(nil)

2.2.Redis中的列表

    一个列表结构可以有序的存储多个字符串。

命令行为
rpush将给定值推入列表的右端
lpush将指定值推入列表的左侧
lrange获取列表给定范围上的所有值
lindex获取列表在给定位置上的单个元素
lpop从列表的左端弹出一个值,并返回被弹出的值
##在给列表存入一条数据时,该命令会返回列表当前的长度
127.0.0.1:6379> rpush list v1
(integer) 1
127.0.0.1:6379> rpush list v2
(integer) 2
127.0.0.1:6379> rpush list v3
(integer) 3
###使用0为范围的起始索引,-1为范围对的结束索引,可以取出列表包含的所有元素
127.0.0.1:6379> lrange list 0 -1
1) "v1"
2) "v2"
3) "v3"
####使用lindex 可以取出列表中的单个元素
127.0.0.1:6379> lindex list 2
"v3"
##从列表中弹出一个元素,该元素就不会存在于列表
127.0.0.1:6379> lpop list
"v1"
127.0.0.1:6379> lrange list 0 -1
1) "v2"
2) "v3"

2.3.Redis的集合

   Redis的集合和列表都可以存储多个字符串,之间不同在于。列表可以存储多个相同的字符串,集合通过散列来保证存储的每个字符串都是各不相同,这些散列只有键,但是没有与键相关的值。

    集合使用无需方式存储元素,所以不能像列表那样,将元素推入某一端,或者弹出

命令行为
sadd将给定元素添加到集合
smembers返回集合包含的所有元素
sismember检查给定元素是否存在于集合
srem如果给定的元素存在于集合中,那么移除该y
##将一个元素添加到集合,返回1表示成功添加,返回0表示该元素已经存在集合中
127.0.0.1:6379> sadd sets v1
(integer) 1
127.0.0.1:6379> sadd sets v2
(integer) 1
127.0.0.1:6379> sadd sets v2
(integer) 0
127.0.0.1:6379> sadd sets v3
(integer) 1
##获取集合的所有元素序列
127.0.0.1:6379> smembers sets
1) "v1"
2) "v3"
3) "v2"
##检查元素是否存在与集合
127.0.0.1:6379> sismember sets v2
(integer) 1
127.0.0.1:6379> sismember sets v5
(integer) 0
##移除集合中的元素,返回被移除的元素数量
127.0.0.1:6379> srem sets v1
(integer) 1
127.0.0.1:6379> srem sets v1
(integer) 0
127.0.0.1:6379> smembers sets
1) "v3"
2) "v2"

2.4.Redis的散列

    Redis的散列可以存储多个键值对之间的映射,散列存储的值既可以是字符串也可以是数字,用户可以对散列存储的数字执行自增或者自减操作。

命令行为
hset在散列里面关联起给定的键值对
hget获取指定散列键的值
hgetall获取散列包含的所有键值对
hdel如果给定键存在于散列里面,那么移除这个键
##添加键值对到散列时,命令会返回0或者1来表示给定的键是否存在于散列
127.0.0.1:6379> hset hashs  key1  value1
(integer) 1
127.0.0.1:6379> hset hashs  key2  value2
(integer) 1
127.0.0.1:6379> hset hashs  key2  value2
(integer) 0
##获取散列包含的所有键值对
127.0.0.1:6379> hgetall hashs
1) "key1"
2) "value1"
3) "key2"
4) "value2"
##删除键值对时,会返回给定的键值对在删除前是否存在于散列
127.0.0.1:6379> hdel hashs key1
(integer) 1
127.0.0.1:6379> hdel hashs key1
(integer) 0
##从散列获取某个键的值
127.0.0.1:6379> hget hashs key2
"value2"
127.0.0.1:6379> hgetall hashs
1) "key2"
2) "value2"

2.2.Redis的有序集合

    有序集合和散列一样,都是用于存储键值对,有序集合的键被称为成员(member),每个成员都是不同的;有序几个的值被称为分值(score),分值必须为浮点数。有序集合是Redis中唯一一个既可以根据成员访问元素,又可以根据分值以及分值的排列顺序来访问元素的结构。

命令行为
zadd将一个带有给定分值的成员添加到有序集合里面
zrange根据元素在有序排列中所处的位置,从有序集合中获取多个元素
zrangebyscore获取有序集合在给定分值范围内的所有元素
zrem如果给定成员存在于有序集合,那么移除这个成员
##在添加元素到有序集合时,会返回0或1,显示元素以前是否存在于有序集合
127.0.0.1:6379> zadd zset 728 vv1
(integer) 1
127.0.0.1:6379> zadd zset 888 vv2
(integer) 1
127.0.0.1:6379> zadd zset 888 vv2
(integer) 0
## 查询有序集合包含的所有元素
127.0.0.1:6379> zrange zset 0 -1
1) "vv1"
2) "vv2"
##获取有序集合包含的所有元素,多个元素会按照分值大小进行排序
127.0.0.1:6379> zrange zset 0 -1 withscores
1) "vv1"
2) "728"
3) "vv2"
4) "888"
##根据分值获取有序几个中的一部分元素
127.0.0.1:6379> zrangebyscore zset 0 800 withscores
1) "vv1"
2) "728"
##在移除有序集合的元素的时候,命令返回移除元素的数量
127.0.0.1:6379> zrem zset vv1
(integer) 1
127.0.0.1:6379> zrem zset vv1
(integer) 0
127.0.0.1:6379> zrange zset 0 -1 withscores
1) "vv2"
2) "888"

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值