Redis 基础一

Redis 基础一

在Web应用发展的初期,那时关系型数据库受到了较为广泛的关注和应用,原因是因为那时候Web站点基本上访问和并发不高、交互也较少。而在后来,随着访问量的提升,使用关系型数据库的Web站点多多少少都开始在性能上出现了一些瓶颈,而瓶颈的源头一般是在磁盘的I/O上。而随着互联网技术的进一步发展,各种类型的应用层出不穷,这导致在当今云计算、大数据盛行的时代,对性能有了更多的需求,主要体现在以下四个方面:

  1. 低延迟的读写速度:应用快速地反应能极大地提升用户的满意度
  2. 支撑海量的数据和流量:对于搜索这样大型应用而言,需要利用PB级别的数据和能应对百万级的流量
  3. 大规模集群的管理:系统管理员希望分布式应用能更简单的部署和管理
  4. 庞大运营成本的考量:IT部门希望在硬件成本、软件成本和人力成本能够有大幅度地降低

为了克服这一问题,NoSQL应运而生,它同时具备了高性能、可扩展性强、高可用等优点,受到广泛开发人员和仓库管理人员的青睐

1.Redis(NoSQL)

1.1 什么是redis

Redis是现在最受欢迎的NoSQL数据库之一,Redis是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性:

  • 基于内存运行,性能高效
  • 支持分布式,理论上可以无限扩展
  • key-value存储系统
  • 开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API

相比于其他数据库类型,Redis具备的特点是:

  • C/S通讯模型
  • 单进程单线程模型
  • 丰富的数据类型
  • 操作具有原子性
  • 持久化
  • 高并发读写
  • 支持lua脚本
1.2 redis数据结构

字符串(Strings)
字符串是redis的基本结构数据之一,又key和value组成。它是一个二进制安全的字符串,不仅可以存储字符串还可以存储图片,视频等多种类型的数据最大长度支持512M

## 创建一个字符串
192.168.18.128:7000> set nidie xym 
OK
192.168.18.128:7000> get nidie  
"xym"

## 查看所有key的命令
192.168.18.128:7000> keys *
1) "nidie"

哈希(Hash)
哈希是无序字典,内部实现数组和链表 ,redis中的Hash建只能是String
请添加图片描述

## 一次添加一个键值
192.168.18.128:7000> hset test name tom 
(integer) 1
192.168.18.128:7000> hget test name 
"tom"

## 一次添加多个键值
192.168.18.128:7000> hmset test1 name xixi age 18 
OK
192.168.18.128:7000> hmget test1 name age  
1) "xixi"
2) "18"

## 获得所有的字段和值
192.168.18.128:7000> hmget test1 name age  
1) "xixi"
2) "18"
192.168.18.128:7000> hgetall test 
1) "name"
2) "tom"
192.168.18.128:7000> hgetall test1 
1) "name"
2) "xixi"
3) "age"
4) "18"

这里不过多演示了 后面会更新的命令使用教程
** 列表(List)**
redis的列表是一个链表 list的插入和删除非常快 但是索引定位很慢,当列表弹出最后一个元素该数据结构自动被删除,可以把列表看成一根水管 数据可以从一边进,然后从另一边出来。

## 插入数据 l代表left(左),r代表right(右)
192.168.18.128:7000> rpush test2 a b c 
(integer) 3
192.168.18.128:7000> llen test2 
(integer) 3
192.168.18.128:7000> lrange test2 0 -1 
1) "a"
2) "b"
3) "c"

192.168.18.128:7000> lpush test3 a b c 
(integer) 3
192.168.18.128:7000> llen test3
(integer) 3
192.168.18.128:7000> LRANGE test3 0 -1
1) "c"
2) "b"
3) "a"

##弹出数据 弹出数据的同时会将数据删除
192.168.18.128:7000> RPOP test2 1
1) "c"
192.168.18.128:7000> RPOP test2 2
1) "b"
2) "a"
192.168.18.128:7000> RPOP test2 3
(nil)

192.168.18.128:7000> LPOP test3 
"c"
192.168.18.128:7000> LPOP test3 
"b"
192.168.18.128:7000> LPOP test3 
"a"
192.168.18.128:7000> LPOP test3 
(nil)

集合(Set)
在redis集合中数据的无序的不能重复

## 添加数据
192.168.18.128:7000> SADD TEST4 PHP 
(integer) 1
192.168.18.128:7000> SADD TEST4 PHP 
(integer) 0  //添加重复的返回值为0
192.168.18.128:7000> SADD TEST4 JAVA PYTHON 
(integer) 2

## 获取集合中的数量
192.168.18.128:7000> SCARD TEST4 
(integer) 3
192.168.18.128:7000> SMEMBERS TEST4 
1) "PHP"
2) "PYTHON"
3) "JAVA"  //集合是无序的 获取的也是无序的 在生产环境中谨慎使用 数据量可能会导致服务器宕机 

192.168.18.128:7000> SPOP TEST4 
"PHP"  //弹出数据并删除
192.168.18.128:7000> SMEMBERS TEST4 
1) "PYTHON"
2) "JAVA"

## 判断数据是否存在
192.168.18.128:7000> SISMEMBER TEST4 GOLANG 
(integer) 0

## 删除数据
192.168.18.128:7000> SREM TEST4 JAVA PYTHON 
(integer) 2
192.168.18.128:7000> SMEMBERS TEST4 
(empty array)

## 取交集
192.168.18.128:7000> SINTER key1 key2

## 取并集 
192.168.18.128:7000> SUNION key1 key2

## 去差集
192.168.18.128:7000> SDIFF key1 key2

有序集合(zset)
zset是一个有序集合 保证元素的唯一性 ,并且可以给每个元素会关联一个double类型的分数 通过这个权重来进行从小到大进行排序 。

## 添加数据
192.168.18.128:7000> ZADD TEST5 1.1 A 
(integer) 1
192.168.18.128:7000> ZADD TEST5 1.2 B 
(integer) 1
192.168.18.128:7000> ZADD TEST5 1.3 C 
(integer) 1

## 获取数据
基于位置的排序
192.168.18.128:7000> ZRANGE TEST5 0 -1 
1) "A"
2) "B"
3) "C"
192.168.18.128:7000> ZREVRANGE TEST5 0 -1 
1) "C"
2) "B"
3) "A"

基于权重的排序
192.168.18.128:7000> ZRANGEBYSCORE TEST5 1.1 1.3 
1) "A"
2) "B"
3) "C"
192.168.18.128:7000> ZREVRANGEBYSCORE TEST5 1.3 1.1 
1) "C"
2) "B"
3) "A"

## 修改数据
192.168.18.128:7000> ZADD TEST5 NX  A
(integer) 0
192.168.18.128:7000> ZSCORE TEST5 A
"1.1000000000000001"
192.168.18.128:7000> ZINCRBY TEST5 +0.1 A 
"1.2000000000000002"

## 获取排名
192.168.18.128:7000> ZRANK TEST5 A
(integer) 1
192.168.18.128:7000> ZRANK TEST5 B
(integer) 0
192.168.18.128:7000> ZRANK TEST5 C
(integer) 2
192.168.18.128:7000> ZSCORE TEST5 A
"1.2000000000000002"
192.168.18.128:7000> ZSCORE TEST5 B
"1.2"
192.168.18.128:7000> ZSCORE TEST5 C
"1.3"

192.168.18.128:7000> ZREVRANK TEST5 A
(integer) 1
192.168.18.128:7000> ZREVRANK TEST5 B
(integer) 2
192.168.18.128:7000> ZREVRANK TEST5 C
(integer) 0

## 查看权值范围的值有多少 
192.168.18.128:7000> ZCOUNT TEST5 1 2
(integer) 3

请添加图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值