今天给大家分享的是Redis,如有不足之处,敬请指正,那么什么是Redis呢?
一、Redis简介
1.1 Redis是什么
Redis是一个开源的,使用ANSI C 编写,高性能的Key-Value的NoSQL数据库
1.2 Redis特点
- 基于内存
- 可持久化数据
- 具有丰富的数据结构类型,适应非关系型数据的存储需求
- 支持绝大多数主流开发语言,如C、C++、Java、Python、R、JavaScript等。
- 支持集群模式,高效、稳定。
1.3 数据模型
- 键值对形式。
- Redis的数据结构类型,指的就是Redis值的结构类型。
1.4 Redis作用
- 本质是数据库,能存储数据。
Redis能灵活处理非关系型数据的读、写问题,是对MySQL等关系型数据库的补充。 - 缓存数据。
所谓缓存,就是将数据加载到内存中后直接使用,而不是每次都通过IO流从磁盘上读取。好处:读写效率高。而Redis则是将数据直接存储在内存中,只有当内存空间不足时,将部分数据持久化到磁盘上。
二、Redis的键key
前面我们说到Redis的数据模型为键值对形式。接下来我们来分析Redis的键key。
2.1 key的类型
redis的key 值是二进制安全的,这意味着可以用任何二进制序列作为key值,从形如”foo”的简单字符串到一个JPEG文件的内容都可以。
空字符串也是有效key值。
redis建议使用字符串做为key的类型
2.2 key取值规范
- 键值不需要太长,消耗内存,在数据中查找这类键值的计算成本较高。
- 键值不宜过短,可读性较差,通常建议见名知意。
2.2.1 取值举例
将如下数据库表中的数据,转换为redis的key-value存储。
id | username | password | |
---|---|---|---|
1 | lisi | 111111 | lisi@163.com |
- 127.0.0.1:6379> set user:id:1:username lisi
OK
- 127.0.0.1:6379> set user:id:1:password 111111
OK
- 127.0.0.1:6379> set user:id:1:email lisi@163.com
OK
- 127.0.0.1:6379> keys user:id:1* #查找有几个属性
-
“user:id:1:password”
-
“user:id:1:username”
-
“user:id:1:email”
- 127.0.0.1:6379>
2.3 Key命令
命令 | 作用 |
---|---|
exists key | 检查给定key是否存在。 |
del key | 删除一个key |
del key1 key2 key3 | 删除多个key |
keys pattern (模糊查找) | 查找所有符合给定模式 pattern 的 key |
expire key seconds | 指定key的过期时间。新添加的key,如果没有指定过期时间,则会一直保存。可以对一个已经带有生存时间的key执行EXPIRE命令,新指定的生存时间会取代旧的生存时间。 |
ttl key | 查看某个key的剩余过期时间,返回值:2 表示这个key已经过期返回1表示没有设置过期时间 返回其它 表示剩余的生存时间,单位为秒。 |
rename | 语法格式:rename key newkey将 key 改名为 newkey 。当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。当 newkey 已经存在时, RENAME 命令将覆盖旧值。 |
type key | 查看key对应的value的数据结构类型 |
其它key命令见redis帮助文档 http://doc.redisfans.com/
三、Redis的值value(数据结构类型)
3.1 string类型
string类型是redis最常用的数据结构类型,存储的值为字符串。
3.1.1 String相关命令
命令 | 作用 |
---|---|
set key value | 设置一个key,值为value,类型为String类型;如果这个key已经存在,则更新这个key的值。返回值1 表示成功0 表示失败 |
get key | 获取key对应的value值;如果key不存在,则返回nil |
mget key1 key2 | 一次获取多个key的值,如果对应key不存在,则对应返回nil |
incr key | 将 key 中储存的数字值增一,然后返回 |
decr key | 将 key 中储存的数字值减一,然后返回,如果这个key不存在,那么key的值会先被初始化为0,然后再执行INCR操作。如果这个key对应的value值,不能表示数字,则会返回一个错误 |
decrby key decrement | 将key减少对应的步长值 |
append key value | 如果key已经存在,则将value追加到这个key原先的value值的末尾。如果这个key不存在,则执行set操作 |
Redis的key是单线程模式,这就意味一瞬间只有一个线程能够持有这个key,所以可以使用redis解决部分涉及线程安全的业务。
- 127.0.0.1:6379> help @string 查看string类型的帮助文档
- 127.0.0.1:6379> help set 查看set命令的帮助文档
3.2 List类型
3.2.1 特点
- 基于Linked List实现
- 元素是字符串类型
- 列表头尾增删快,中间增删慢,增删元素是常态
- 元素可以重复出现
- 最多包含2^32-1元素
图示 |
---|
- 列表的索引
- 从左至右,从0开始
- 从右至左,从-1开始
图示 |
---|
3.2.2 List类型相关命令
命令 | 作用 |
---|---|
lpush key value [value …] | 将一个或多个值value插入到列表key的表头(即从左边插入) 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。当 key 存在但不是列表类型时,返回一个错误。 |
rpush key value [value …] | 尾部添加(从右向左),操作同上 |
llen key | 返回key对应list的长度,key不存在返回0,如果key对应类型不是list返回错误 |
lindex key index | index元素在list列表中的下角标,从0开始;lindex 是从左到右取元素 |
lrange key start stop | 获取指定区间的所有元素;下角标从0开始,0表示第一个元素,1表示第二个,依次类推;-1表示最后一个元素,-2表示倒数第二个元素,依次类推; |
lpop key | 移除并返回列表中的第一个元素 |
rpop key | 移除并返回列表中的最后一个元素 |
3.3 Hash类型
3.3.1 特点
特点 |
---|
- 由Field和与之关联的value组成map键值对
- field和value是字符串类型
- 一个hash中最多包含2^32-1键值对
3.3.2 Hash相关命令
命令 | 作用 |
---|---|
hset key field value | 设置hash field为指定值,如果key不存在,则先创建 如果field已经存在,那么将更新这个field的值 |
hget key field | 获取指定的hash field |
hmget key filed1…fieldN | 获取全部指定的hash filed |
hmset key filed1 value1 … filedN valueN | 同时设置hash的多个field |
hexists key field | 测试指定field是否存在 |
hdel key field | 删除指定的hash field |
hlen key | 返回指定hash的field数量 |
hkeys key | 返回hash的所有field |
hvals key | 返回hash的所有value |
hgetall | 返回hash的所有filed和value |
3.3.3 Hash的用途
节约内存空间
redis每创建一个键,都会为这个键储存一些附加的管理信息(比如这个键的类型,这个键最后一次被访问的时间等等)
redis的key相对于值来说,更珍贵!!!
所以数据库里面的键越多,redis数据库服务器在储存附加管理信息方面耗费的内存就越多,在获取key对应的value值时cpu的开销也会更多
Hash结构可以将具有关联关系的一组key-value,存储到同一个hash结构中,从而减少key的数量。
3.3.4 hash不适用的场景
需要设置键过期功能的key:
Redis的key的过期功能只能对键操作,而Hash结构不能单独对某一个filed设置过期功能。
3.4 Set类型(集合)
3.4.1 特点
特点 |
---|
- 无序的、去重的;
- 元素是字符串类型;
- 最多包含2^32-1元素。
3.4.2 Set相关命令
命令 | 作用 |
---|---|
sadd key member [member …](无序不重复) | 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略 |
smembers key | 返回集合 key 中的所有成员。不存在的 key 被视为空集合 |
spop key | 移除并返回集合中的一个随机元素。被移除的随机元素。当key不存在或key是空集时,返回nil |
scard key | 返回集合key的基数(集合中元素的数量)。集合的基数。当key不存在时,返回0 |
sinter key [key …] 交集 | 返回一个集合的全部成员,该集合是所有给定集合的交集。不存在的 key 被视为空集 |
sunion key [key …] 并集 | 返回一个集合的全部成员,该集合是所有给定集合的并集。不存在的 key 被视为空集 |
sdiff key [key …] 差集 | 返回一个集合的全部成员,该集合是所有给定集合之间的差集。不存在的 key 被视为空集 |
3.5 SortedSet类型
3.5.1 特点
- 类似Set集合;
- 有序的、去重的;
- 元素是字符串类型;
- 每一个元素都关联着一个浮点数分值(Score),并按照分值从小到大的顺序排列集合中的元素。分值可以相同
- 最多包含2^32-1元素
版权说明:欢迎以任何方式进行转载,但请在转载后注明出处!