Redis学习-入门篇

本文涵盖:

  • Redis 定义
  • Redis的优势
  • Redis的应用场景
  • 安装与启动
  • 基本数据类型
  • sort set特性

1. 什么是Redis

Redis 是一个支持网络交互的、可基于内存也可持久化的Key-Value数据库(非关系性数据库),它不仅性能强劲,而且还具有复制特性; Redis提供了五种不同类型的数据结构,各式各样的问题都可以很自然地映射到这些数据结构上。

2. Redis的优势

  1. 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
  2. 支持丰富数据类型,支持string,list,set,sorted set,hash
  3. 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
  4. 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除

3. Redis的应用场景

  • 缓存

(1) 对于一些要返回给前端数据的缓存,当有大量数据库sql操作时候,为了避免每次接口请求都要去查询数据库,可以把一些数据缓存到redis中,这样是直接从内存中获取数据,速度回增快很多。

(2) web端用户,用于登陆缓存session数据,登陆的一些信息存到session中,缓存到redis中

  • 队列

redis中提供了list接口,这个list提供了lpush和rpop,这两个方法具有原子性,可以插入队列元素和弹出队列元素。

  • 数据存储

redis是非关系型数据库,可以把redis直接用于数据存储,提供了增删改查等操作,因为redis有良好的硬盘持久化机制,redis数据就可以定期持久化到硬盘中,保证了redis数据的完整性和安全性。

  • redis锁实现防刷机制

redis锁可以处理并发问题,redis数据类型中有一个set类型,set类型在存储数据的时候是无序的,而且每个值是不一样的,不能重复,这样就可以快速的查找元素中某个值是否存在,精确的进行增加删除操作。

说明:redis在不同场景的实际应用, 将会在redis学习(3)-实战篇中详细讲解

4. redis安装与启动

4.1 redis的安装

redis安装比较简单, 在网上可以找到大量关键安装讲解的文章, 在这里就不赘述; 在安装过程中需要关注的点是:修改redis密码配置。

打开 redis.windows.conf 配置文件//window系统是带windows的linux系统是redis.conf找到requirepass foobared,把前面的#号去掉,把foobared改成密码 例如requirepass 123456

注意修改密码后需要重新启动redis服务器

4.2 redis启动的相关命令

  1. 检测启动redis客户端命令:redis-clis
  2. 启动redis命令:

./redis-server直接启动redis,有的时候需要启动固定配置文件(重新设置过密码)的redis,例如redis-server redis/redis.windows.conf或者./redis-server ../redis.conf

  1. redis服务相关命令:
    • 卸载服务:redis-server –service-uninstall
    • 开启服务:redis-server –service-start
    • 停止服务:redis-server –service-stop

5.redis的基本数据类型

redis是一种高级的key-value非关系型数据库。其中value支持五种数据类型:string(字符串) 、 List(列表)、set(集合)、hash(散列)、ZSET(有序集合), 表1-1对比Redis提供的5种结构, 说明这些结构存储的值,并简单介绍它们的语义。

表1-1: Redis提供的5种结构

结构类型

结构存储的值

结构的读写能力

string

可以是字符串、整数或者浮点数

对整个字符串或者字符串的其中一部分执行操作; 对整数和浮点数执行自增(increment)或者自减(decrement)操作

List

一个链表,链表上的每个节点都包含了一个字符串

从链表的两端推入或者弹出元素;根据偏移量对链表进行修剪(trim); 读取单个或者多个元素;根据值查找或者移除元素

set

包含字符串的无序收集器(unordered collection),并且被包含的每个字符串都是独一无二、各不相同的

添加、获取、移除单个元素;检查一个元素是否存在于集合中; 计算交集、并集、差集;从集合里面随机获取元素

hash

包含键值对的无序散列表

添加、获取、移除单个键值对;获取所有键值对

ZSET

字符串成员(member)与浮点数分值(score)之间的有序映射,元素的排列顺序由分值的大小决定

添加、获取、删除单个元素;根据分值范围(range)或者成员来获取元素

5.1 字符串(string)

Redis的string和其他编程语言或其他key-value存储提供的字符串非常相似, 命令差异不大,比如get(获得值)、 set(设置值) 以及del(删除值)。

代码操作如下:

[root@VM_160_197_centos /]# redis-cli
127.0.0.1:6379> set string1 koala
OK
127.0.0.1:6379> get string1
"koala"
127.0.0.1:6379> set string2 2
OK
127.0.0.1:6379> get string2
"2"
127.0.0.1:6379> incr string2
(integer) 3
127.0.0.1:6379> get string2
"3"
127.0.0.1:6379> decrby string2 2
(integer) 1
127.0.0.1:6379> get string2
"1"

5.2 字符串列表(list)

list类型是一个有序的列表,有序表示的是从左到右还是从右到左,而且数据内容是可以重复的。 代码实际操作过程:

[root@VM_160_197_centos /]# redis-cli
127.0.0.1:6379> lpush list1 12
(integer) 1
127.0.0.1:6379> lpush list1 13
(integer) 2
127.0.0.1:6379> lpush list1 12
(integer) 3
127.0.0.1:6379> rpop list1
"12"
127.0.0.1:6379> lpush list2 12
(integer) 1
127.0.0.1:6379> lpush list2 13
(integer) 2
127.0.0.1:6379> lpush list2 12
(integer) 3
127.0.0.1:6379> llen list2
(integer) 3
127.0.0.1:6379>

5.3 字符串集合(set)

set类型中提供了无序的方式来存储多个不同的元素,set类型中每个元素的值都不一样,用户可以快速对元素中的值添加删除,检查某些值是否存在,重复的元素是无法继续插入集合的。 代码实际操作过程:

127.0.0.1:6379> sadd set1 12
(integer) 1
127.0.0.1:6379> sadd set1 12
(integer) 0
127.0.0.1:6379> scard set1
(integer) 1
127.0.0.1:6379> sadd set1 13
(integer) 1
127.0.0.1:6379> scard set1
(integer) 2
127.0.0.1:6379> sadd set1 13
(integer) 0
127.0.0.1:6379> sismember set1 13  //查看13是否在集合中
(integer) 1
127.0.0.1:6379> srem set1 13    //从集合中删除13

5.4 哈希(hash)

hash类型也叫散列类型,存储的时候存的是键值对。查询条数的时候只要是健不一样,就是不同的条数,尽管值是相同的。

代码实际操作过程:

[root@VM_160_197_centos /]# redis-cli
127.0.0.1:6379> hset hash1 key1 12
(integer) 1
127.0.0.1:6379> hget hash1 key1
"12"
127.0.0.1:6379> hset hash1 key2 13
(integer) 1
127.0.0.1:6379> hset hash1 key3 13
(integer) 1
127.0.0.1:6379> hlen hash1//查询条数的时候只要是健不一样,就是不同的条数,尽管值是相同的。
(integer) 3
127.0.0.1:6379> hset hsah1 key3 14
(integer) 1
127.0.0.1:6379> hset hash1 key3 14
(integer) 0
127.0.0.1:6379> hget hash1 key3
"14"
127.0.0.1:6379> hmget hash1 key1 key2  //同时获取key1和key2的值
1) "12"
2) "13"

5.5 有序字符串集合(ZSET)

ZSET也叫有序分数集,可以把它看作一个排行榜,每一个同学都有自己的分数,且排行榜中还有一个排名的属性,排行属性从0,根据分数不断变大,排行也不断变大。这个类型有点复杂,上一张图吧。

SET特性

  • 中的值是全局唯一的。一个值设置了之后,再次设置不会增加,只会覆盖修改。
  • 如果有两条分数相同,排名应该怎那么看? 如果两个分数值形同,会根据值两个元素变量名的字典排序顺序排列先后,可看下方操作代码

代码实际操作过程:

127.0.0.1:6379[1]> zadd zset1 10.1 val1 //添加一个值和分数
(integer) 1
127.0.0.1:6379[1]> zadd zset1 11.1 val2
(integer) 1
127.0.0.1:6379[1]> zadd zset1 9.2 val3
(integer) 1
127.0.0.1:6379[1]> zcard zset1 //统计当前key下值的个数
(integer) 3
127.0.0.1:6379[1]> zrange zset1 0 2 withscores  //查看0到2的所有值和分数按照排名
1) "val3"
2) "9.1999999999999993"
3) "val1"
4) "10.1"
5) "val2"
6) "11.1"
127.0.0.1:6379[1]> zrank zset1 val2
(integer) 2
127.0.0.1:6379[1]> zadd zset1 12.2 val3 //覆盖iu该val3
(integer) 0
127.0.0.1:6379[1]> zrange zset1 0 2 withscores//查看0到2的所有值和分数按照排名
1) "val1"
2) "10.1"
3) "val2"
4) "11.1"
5) "val3"
6) "12.199999999999999"
127.0.0.1:6379[1]> zadd zset1 12.2 val2
(integer) 0
127.0.0.1:6379[1]> zrange zset1 0 2 withscores//这时候有两个分数相同,查看0到2的所有值和分数按照排名
1) "val1"
2) "10.1"
3) "val2"
4) "12.199999999999999"
5) "val3"
6) "12.199999999999999"

本章对于Redis进行了初步介绍, 介绍了Redis的一些特性以及数据结构, Redis是一个可以用来解决问题的工具, 它具备其他数据库所不具备的数据结构,并且因为他是内存数据库(这使得Redis的速度非常快),具有远程(Redis可以连接多个客户端和服务器)、持久化等特性,使用我们可以使用它来解决各种不同问题,下一章节将继续介绍他的远程以及持久化特性, 之后就说说它在不同场景下是应用。

本文分享自微信公众号 - 程序员成长指北(coder_growth),作者:Koala

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Redis 基本数据类型学习-入门篇

    redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库(非关系性数据库)。

    coder_koala
  • 超详细的redis学习-进阶篇

    说明:一个redis实例可以包含多个数据库,客户端可以指定连接某个数据库(与MySql客户端我们创建多个数据库类似)一个redis实例最多可以提供16个数据库,...

    coder_koala
  • Node.js 有难度的面试题,你能答对几个?

    所有的模块都是 Module 的实例。可以看到,当前模块(module.js)也是 Module 的一个实例。

    coder_koala
  • 初识Redis

    老七Linux
  • 一篇Redis的简明教程

    http://blog.csdn.net/qq_25797077/article/details/51986455

    哲洛不闹
  • Redis数据库及其基本操作

    Redis 是一个高性能的key-value数据库, 支持主从同步, 完全实现了发布/订阅机制, 因此可以用于聊天室等场景. 主要表现于多个浏览器之间的信息同步...

    周小董
  • Redis 从入门到起飞(上)

    1. Redis 介绍1.1 NoSQL 基本概念1.2 NoSQL 分类1.3 Redis 基本概念1.4 发展历史1.5 应用场景2. Redis 安装2....

    芋道源码
  • Redis系列---操作命令及数据类型

    我们接下来操作的命令用的是Redis自带的客户端工具,在安装redis的目录下面有个redis-cli的,我们启动它即可,启动之前要先启动redis喔!

    Arebirth
  • 那些容易被遗忘的 Redis 功能

    Redis 的 SORT 命令可以对列表(List)、集合(Set)和有序集合(Sorted Set)的元素值进行排序(快排算法)。

    happyJared
  • 3.Redis常用命令:String

    字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息...

    陈树义

扫码关注云+社区

领取腾讯云代金券