ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

redis小白入门篇

2021-05-27 16:34:03  阅读:172  来源: 互联网

标签:127.0 6379 0.1 redis lists 入门篇 小白 集合


什么是redis

redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库,一种高级的key:value存储系统
三个特点:
1:支持数据的持久化,可以将内存中的数据保存在磁盘中。重启的时候可以再次加载进来使用
2:不仅仅支持简单的key-value形式数据,同时还提供list,set,zset,hash等数据结构的存储
3:redis支持数据的备份,即master-slave模式的数据备份。

redis数据库的优势

  • 1:性能极高-redis能读的速度是110000次/s,写的速度是81000次/s
    2:丰富的数据类型-Redis支持二进制案例的Strings, Lists, Hashes, Sets 及 Ordered Sets
    数据类型操作
    3:原子-redis所有的操作都是原子性的,意思就是要么成功执行,要么失败完全不执行,单个操作是原子的,多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
    4:丰富的特性- Redis还支持 publish/subscribe, 通知, key 过期等等特性。

redis支持的数据类型

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

关于key的注意事项:

key不要太长,尽量不要超过1024字节,这不仅消耗内存,而且会降低查找的效率key也不要太短,如果太短,可读性会降低
在一个项目中,key最好用统一的命名模式。

数据结构详解

redis数据结构 – strings

有人说,如果只使用redis中的字符串类型,且不使用redis的持久化功能,那么,redis就和memcache非常非常的像了。这说明strings类型是一个很基础的数据类型,也是任何存储系统都必备的数据类型。
代码如下:

        set mystr "hello world!" //设置字符串类型 
        get mystr //读取字符串类型 
     ```
字符串类型的用法就是这么简单,因为是二进制安全的,所以你完全可以把一个图片文件的内容作为字符串来存储。
另外,我们还可以通过字符串类型进行数值操作:
```sql
127.0.0.1:6379> set mynum "2" 
OK 
127.0.0.1:6379> get mynum 
"2" 
127.0.0.1:6379> incr mynum 
(integer) 3 
127.0.0.1:6379> get mynum 
"3" 

【redis数据结构 – lists】

redis的另一个重要的数据结构叫做lists,翻译成中文叫做“列表”。
redis的另一个重要的数据结构叫做lists,翻译成中文叫做“列表”。

首先要明确一点,redis中的lists在底层实现上并不是数组,而是链表,也就是说对于一个具有上百万个元素的lists来说,在头部和尾部插入一个新元素,其时间复杂度是常数级别的,比如用LPUSH在10个元素的lists头部插入新元素,和在上千万元素的lists头部插入新元素的速度应该是相同的。

虽然lists有这样的优势,但同样有其弊端,那就是,链表型lists的元素定位会比较慢,而数组型lists的元素定位就会快得多。

lists的常用操作包括LPUSH、RPUSH、LRANGE等。我们可以用LPUSH在lists的左侧插入一个新元素,用RPUSH在lists的右侧插入一个新元素,用LRANGE命令从lists中指定一个范围来提取元素。我们来看几个例子:


//新建一个list叫做mylist,并在列表头部插入元素"1" 
127.0.0.1:6379> lpush mylist "1"  
//返回当前mylist中的元素个数 
(integer) 1  
//在mylist右侧插入元素"2" 
127.0.0.1:6379> rpush mylist "2"  
(integer) 2 
//在mylist左侧插入元素"0" 
127.0.0.1:6379> lpush mylist "0"  
(integer) 3 
//列出mylist中从编号0到编号1的元素 
127.0.0.1:6379> lrange mylist 0 1  
1) "0" 
2) "1" 
//列出mylist中从编号0到倒数第一个元素 
127.0.0.1:6379> lrange mylist 0 -1  
1) "0" 
2) "1" 
3) "2" 

lists的应用相当广泛,随便举几个例子:

  • 1.我们可以利用lists来实现一个消息队列,而且可以确保先后顺序,不必像MySQL那样还需要通过ORDER BY来进行排序。
  • 2.利用LRANGE还可以很方便的实现分页的功能。
  • 3.在博客系统中,每片博文的评论也可以存入一个单独的list中。

【redis数据结构 – 集合】

redis的集合,是一种无序的集合,集合中的元素没有先后顺序。
集合相关的操作也很丰富,如添加新元素、删除已有元素、取交集、取并集、取差集等。我们来看例子:

//向集合myset中加入一个新元素"one" 
127.0.0.1:6379> sadd myset "one"  
(integer) 1 
127.0.0.1:6379> sadd myset "two" 
(integer) 1 
//列出集合myset中的所有元素 
127.0.0.1:6379> smembers myset  
1) "one" 
2) "two" 
//判断元素1是否在集合myset中,返回1表示存在 
127.0.0.1:6379> sismember myset "one"  
(integer) 1 
//判断元素3是否在集合myset中,返回0表示不存在 
127.0.0.1:6379> sismember myset "three"  
(integer) 0 
//新建一个新的集合yourset 
127.0.0.1:6379> sadd yourset "1"  
(integer) 1 
127.0.0.1:6379> sadd yourset "2" 
(integer) 1 
127.0.0.1:6379> smembers yourset 
1) "1" 
2) "2" 
//对两个集合求并集 
127.0.0.1:6379> sunion myset yourset  
1) "1" 
2) "one" 
3) "2" 
4) "two" 

对于集合的使用,也有一些常见的方式,比如,QQ有一个社交功能叫做“好友标签”,大家可以给你的好友贴标签,比如“大美女”、“土豪”、“欧巴”等等,这时就可以使用redis的集合来实现,把每一个用户的标签都存储在一个集合之中。

【redis数据结构 – 有序集合】

redis不但提供了无需集合(sets),还很体贴的提供了有序集合(sorted sets)。有序集合中的每个元素都关联一个序号(score),这便是排序的依据。

很多时候,我们都将redis中的有序集合叫做zsets,这是因为在redis中,有序集合相关的操作指令都是以z开头的,比如zrange、zadd、zrevrange、zrangebyscore等等

老规矩,我们来看几个生动的例子:
//新增一个有序集合myzset,并加入一个元素baidu.com,给它赋予的序号是1:


27.0.0.1:6379> zadd myzset 1 baidu.com  
(integer) 1 
//向myzset中新增一个元素360.com,赋予它的序号是3 
127.0.0.1:6379> zadd myzset 3 360.com  
(integer) 1 
//向myzset中新增一个元素google.com,赋予它的序号是2 
127.0.0.1:6379> zadd myzset 2 google.com  
(integer) 1 
//列出myzset的所有元素,同时列出其序号,可以看出myzset已经是有序的了。 
127.0.0.1:6379> zrange myzset 0 -1 with scores  
1) "baidu.com" 
2) "1" 
3) "google.com" 
4) "2" 
5) "360.com" 
6) "3" 
//只列出myzset的元素 
127.0.0.1:6379> zrange myzset 0 -1  
1) "baidu.com" 
2) "google.com" 
3) "360.com" 

【redis数据结构 – 哈希】

最后要给大家介绍的是hashes,即哈希。哈希是从redis-2.0.0版本之后才有的数据结构。
hashes存的是字符串和字符串值之间的映射,比如一个用户要存储其全名、姓氏、年龄等等,就很适合使用哈希。
我们来看一个例子:

建立哈希,并赋值 
127.0.0.1:6379> HMSET user:001 username antirez password P1pp0 age 34  
OK 
//列出哈希的内容 
127.0.0.1:6379> HGETALL user:001  
1) "username" 
2) "antirez" 
3) "password" 
4) "P1pp0" 
5) "age" 
6) "34" 
//更改哈希中的某一个值 
127.0.0.1:6379> HSET user:001 password 12345  
(integer) 0 
//再次列出哈希的内容 
127.0.0.1:6379> HGETALL user:001  
1) "username" 
2) "antirez" 
3) "password" 
4) "12345" 
5) "age" 
6) "34"

启动 redis 客户端

启动 redis 服务器,打开终端并输入命令 redis-cli,该命令会连接本地的 redis 服务。

$ redis-cli
  redis 127.0.0.1:6379>
  redis 127.0.0.1:6379> PING
  
  PONG

在远程 redis 服务上执行命令,同样我们使用的也是 redis-cli 命令。

语法:$ redis-cli -h host -p port -a password
eg:以下实例演示了如何连接到主机为 127.0.0.1,端口为 6379 ,密码为 mypass 的 redis 服务上。
$redis-cli -h 127.0.0.1 -p 6379 -a “mypass”
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING
PONG

标签:127.0,6379,0.1,redis,lists,入门篇,小白,集合
来源: https://blog.csdn.net/weixin_37962206/article/details/117331279

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有