day01-Redis入门

Posted liyuelian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day01-Redis入门相关的知识,希望对你有一定的参考价值。

Redis入门

1.初始Redis

1.1认识NoSQL

SQL(关系型数据库) NoSQL(非关系型数据库)
数据结构 结构化(Structured) 非结构化
数据关联 关联的(Relational) 无关联的
查询方式 SQL查询 非SQL
事务特性 ACID BASE
存储方式 磁盘 内存
扩展性 垂直 水平
使用场景 1.数据结构固定 2.相关业务对数据安全性、一致性要求较高 1.数据结构不固定 2.对一致性、安全性要求不高 3.对性能要求高

其中,非关系型数据库有很多种,比如:

  1. 键值类型(Redis)
  2. 文档类型(MongoDB)
  3. 列类型(HBase)
  4. Graph类型(Neo4j)

1.2认识Redis

Redis诞生于2009年,全称为 Remote Dictionary Server(远程词典服务器),是一个基于内存的键值型NoSQL数据库。

Redis特征:

  1. 键值(key-value)型,value支持多种不同的数据结构,功能丰富
  2. 单线程,每个命令具备原子性
  3. 低延迟,速度快(基于内存、IO多路复用、良好的编码)
  4. 支持数据持久化
  5. 支持主从集群、分片集群(主从集群:从节点可以去备份主节点的数据;分片集群:数据的拆分,一份数据可以拆成多分,分别存储在不同的节点上)
  6. 支持多语言客户端

2.安装Redis

2.1单机安装redis

大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包,因此我们这里基于Linux系统来安装Redis。

先安装linux系统:这里是在wsl上安装redis,wsl安装教程更换国内下载源

ubuntu安装redis教程:Ubuntu安装redis详细教程

(1) 安装 Redis 服务器

sudo apt-get install -y redis-server

(2)在 /etc/redis/redis.conf 中修改redis密码,修改配置文件里的 requirepass,把注释关掉,然后后面改为你想设置的密码

sudo vim /etc/redis/redis.conf	#注意使用sudo

(3) 启动 Redis 服务器:使用命令redis-server 启动redis服务器

(4) 验证 Redis 是否正常工作:

新建一个窗口当做redis客户端,用于通信。在客户端输入命令:redis-cli,这会打开一个redis提示符:127.0.0.1:6379>。其中,127.0.0.1 是机器的 IP 地址,6379 是 Redis 服务器运行的端口。键入PING 命令,若返回 PONG 则表示 Redis 已成功安装在你的系统上。

注意事项:

redis-cli 是redis提供的命令行客户端

redis-server 是redis的服务端启动脚本

redis-sentinel 是redis的哨兵启动脚本

2.2redis服务-后台启动

如上所示,我们直接输入命令redis-server,redis服务器将会在前台启动(默认启动方式),这样会阻塞整个会话窗口,窗口按下ctrl+c则redis服务停止,不推荐使用。

如果要让redis以后台方式启动,则必须修改redis的配置文件。

(1)先将该文件备份:

li@LAPTOP-32SOPQVL:/etc/redis$ sudo cp redis.conf redis.cinf.bck
li@LAPTOP-32SOPQVL:/etc/redis$ ls
redis.cinf.bck  redis.conf

(2)再修改配置文件, sudo vim /etc/redis/redis.conf,修改的部分配置如下

# 允许访问的地址,默认是127.0.0.1,会导致只能在本地访问。
# 修改为0.0.0.0则可以在任意IP访问,注意:生产环境不要设置为0.0.0.0 !!
bind 0.0.0.0
# 守护进程,修改为yes后即可后台运行
daemonize yes 
# 密码,设置后访问Redis必须输入密码
requirepass 123456

(3)修改之后,输入命令 sudo redis-server /etc/redis/redis.conf,就可以在后台运行redis服务端了

li@LAPTOP-32SOPQVL:/$ sudo redis-server /etc/redis/redis.conf
li@LAPTOP-32SOPQVL:/$ ps -ef | grep redis #查看端口
root     22196     1  0 21:09 ?        00:00:00 redis-server 0.0.0.0:6379
li       22201  4351  0 21:09 tty2     00:00:00 grep --color=auto redis

(4)后台启动服务端后,因为修改了密码,客户端访问时需要输入密码

Redis报错 : (error) NOAUTH Authentication required (cnblogs.com)

li@LAPTOP-32SOPQVL:~$ redis-cli
127.0.0.1:6379> auth 123456 # 输入密码
OK
127.0.0.1:6379> ping
PONG
  • Redis的其它常见配置:
# 监听的端口
port 6379
# 工作目录,默认是当前目录 . ,也就是运行redis-server时的命令,日志、持久化等文件会保存在这个目录
dir .
# 数据库数量,设置为1,代表只使用1个库,默认有16个库,编号0~15
databases 1
# 设置redis能够使用的最大内存
maxmemory 512mb
# 日志文件,默认为空,不记录日志,可以指定日志文件名
logfile "redis.log"

启动Redis:

# 进入redis安装目录 
cd /usr/local/src/redis-6.2.6
# 启动,需要管理员权限
redis-server /etc/redis/redis.conf

停止服务:

# 利用redis-cli来执行 shutdown 命令,即可停止 Redis 服务,
# 因为之前配置了密码,因此需要通过 -u 来指定密码
redis-cli -u 123456 shutdown

3.Redis客户端

安装完成Redis,我们就可以操作Redis,实现数据的CRUD了。这里需要用到redis的客户端,包括:

  • 命令行客户端
  • 图形化桌面客户端
  • 编程客户端

3.1命令行客户端

Redis安装完成后就自带了命令行客户端,在上面已经使用过,打开新窗口,使用方式如下:

redis-cli [options] [commonds]

常见的options有:

  • -h 127.0.0.1:指定要连接的redis节点的IP地址,默认是127.0.0.1
  • -p 6379:指定要连接的redis节点的端口,默认是6379
  • -a 123456:指定redis的访问密码

commonds是Redis的操作命令,例如:

  • ping:与redis服务端做心跳测试,服务端正常会返回pong

不指定commond时,会直接进入redis-cli的交互控制台:

3.2图形化桌面客户端

RedisInsight/RedisDesktopManager: Cross-platform Developer GUI for Redis (github.com)

下载后直接运行.exe文件,一路点击下一步,选择对应的安装目录,完成安装。

七天玩转Redis | Day2 Redis五大数据类型

文章目录

Redis五大数据类型

Redis的五大数据类型分别是String、List、Set、Hash、Zset

1)String字符串

String类型是Redis中最常用的类型,也是日常生活中应用十分广泛的数据类型。接下来讲解String类型的操作:

注意:还是老样子,我们在启动Redis客户端前,一定确保Redis服务器是开启状态,即开启服务器cmd窗口要保留不能关掉!

  • 设置key的值
    Redis中给string类型的数据设置指定key的方法就是最基本的设置key-value的方法。
    语法:SET key value

  • 获取key的值
    语法:GET key
    例如我们获取刚才输入的索引为k1,值为v1的数据,如果该索引存在,那么将会返回对应的值,如果不存在就会返回(nil)也就是null的意思。

  • 返回key中字符串的子串
    使用getrange指令查找指定key值中子串
    GETRANGE key start end

  • key为字符串的索引

  • start为截取的起始下标

  • end为截取的终止下标
    例如我们mykey中的值为diviner,如果我们要截取到末尾,我们可以将end设置为-1
    如果我们end设定的值大于原本字符串长度则只会返回到字符串末尾的字符。

  • 获取多个指定key的值
    与GET命令不同,GET命令只能获取一个key对应的值,而MGET命令则可以用于获取多个key的值
    MGET key1 [key2...]

  • 返回key对应字符串的长度
    语法:STRLEN key

  • 设置一个或多个键值对
    MSET key1 value1 [key2 value2 ...]

    MSETNX key1 value1 [key2 value2 ...]
    msetnx指令只能在key不存在的情况下才能设置,否则该指令输入无效。

  • 将key中所存储的数值加一
    如果key对应的值不是数的话,则不能加一返回错误信息,语法:
    INCR key

    给key加指定数量的值:
    INCRBY key increment

  • 将key中所存储的数值减一
    DECR key

    将key所存储的值减指定数值
    DECRBY key increment

  • 字符串追加
    APPEND key value
    在指定key的值后面再加上value

2)Hash哈希

Hash类型在我看来类似于C语言中struct结构体的亚子,Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。

Redis 中每个 hash 可以存储 2 32 − 1 2^32-1 2321 键值对(40多亿)。

几个常用的命令:

  • 设置Hash数据
    设置Hash数据使用的指令是HMSET,H代表Hash,M代表Map,语法:
    HMSET key fieId1 value1 [fieId2 value2...]
    key为这个Hash数据对应的唯一性索引
    field为下面存储的一个键值对的键
    value为该键对应的值

    我们以key-value对进行存储
    例如我们设置一个key为myhash,存储的field【key-value】分别为name-Diviner,sex-man、age-18:

  • 获取指定哈希表中所有的字段和值
    我们使用hgetall取出该hash中所有的数据,语法如下:
    HGETALL key

    正如图所示,一行为key值一行为value。

  • 获取存储在哈希表中指定字段的值
    语法:HGET key field

  • 删除一个或多个哈希表字段
    语法:HDEL key field1 [field2...]
    key为指定的哈希表的索引
    field为要删除的值对应的字段,如果要删除多个就以空格分开

  • 获取哈希表中字段的数量
    语法:HLEN key

  • 获取哈希表中的所有字段
    语法:HKEYS key返回的是所有key-value中的key

  • 获取哈希表中所有的值
    语法:HVALS key返回的是所有key-value中的value

3)List列表

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

  • 将一个或多个元素插入列表表头
    也就是耳熟能详的push操作这里是Left左端插入即lpush
    语法:LPUSH key value1 [value2...]

  • 将一个或多个元素插入列表表尾
    表尾插入即从右端Right插入,即rpush
    语法:RPUSH key value1 [value2...]

此时我们的mylist表中元素排列为:t3,t2,t1,t4,t5,t6

  • 获取列表长度
    语法:LLEN key

  • 通过索引获取列表中的元素
    语法:LINDEX key index
    index为指定的下标

  • 移除并获取列表第一个元素
    pop操作。移除表头一个元素并返回出移除的值
    语法:LPOP key

  • 移除并获取列表最后一个元素
    移除表尾最有一个元素并返回
    语法:RPOP key

4) Set集合

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

集合对象的编码可以是 intset 或者 hashtable。

Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

  • 向集合中添加一个或多个成员
    语法:SADD key member1 [member2...]

  • 获取集合中成员的个数
    语法:SCARD key

  • 返回第一个集合与其他集合之间的差异
    语法:SDIFF key1 [key2..]

    注意这里返回的是第一个的与第二个的不同,
    第一个myset : m1,m2,m3
    第二个myset2: m2,m3,aaa,bbb
    返回的是 ‘m1’

  • 返回所给定所有集合的交集
    语法:SINTER key1 [key2...]

    注意这里返回的是第一个与第二个的交集,
    第一个myset : m1,m2,m3
    第二个myset2: m2,m3,aaa,bbb
    返回的是 “m2”,“m3”

  • 返回集合中的所有元素
    语法:SMEMBERS key

5) ZSet有序集合(sorted set)

Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

  • 向有序集合中添加一个或多个成员
    语法:ZADD key score1 member1 [score2 member2...]

    • key为有序集合的索引
    • score为插入成员的分数,
    • member为对应的成员,如果插入多个成员,则以空格分隔
  • 获取有序集合的成员数
    语法:ZCARD key

  • 计算有序集合中指定区间分数的成员数
    语法:ZCOUNT key min max

    • min为区间的最小值
    • max为区间的最大值
  • 根据分数返回有序集合指定区间内的成员
    语法:ZRANGEBYSCORE key min max [WITHSCORES]

    • min表示score的最小值
    • max表示score的最小值
    • [WITHSCORES]是可选的,表示是否带上对应的score

  • 移除有序集合中的一个或多个元素
    语法:ZREM key member1 [member2...]

以上是关于day01-Redis入门的主要内容,如果未能解决你的问题,请参考以下文章

Redis01——Redis入门这一篇就够了(可学习复习面试,收藏备用)

伸手党福利文,Python入门大全

求python入门视频教程,云盘分享谢谢

Java入门1day

python day 1 入门

Python入门学习-DAY02