NoSQL-Redis教程基础篇

Redis教程基础篇

Redis是非关系数据库的代表,因为官方不建议在Windows下使用Redis,所以并不提供Windows的支持,所以我们使用Linux来学习Redis的使用。

Redis的简介

Redis是Key-Value的非关系数据库,它有以下特点:

  1. 高速存取,110k次/s的读取和81k/s次的写入,这也是所有内存数据库的特点
  2. 支持数据持久化,可以把内存中的数据存放的磁盘里,下次启动再加载
  3. 提供多样化数据结构的支持,除了简单的key-value,还支持list、hash、set、sortSet的数据结构
  4. 单线程存取,所以不用同步、不会死锁、不用上下文切换,故而性能极高。
  5. 原子性操作,提供事务支持。

一个字,牛!接下来我们就来安装它。

下载源码并安装运行

首先找到你想要存放Redis的文件夹,我喜欢把软件全都放在Programe文件夹下:

  1. 先新建文件夹$ mkdir Programe 再进入文件夹$ cd Programe
  2. 下载源码:
    $ wget http://download.redis.io/releases/redis-5.0.5.tar.gz
    在这里插入图片描述
  3. 解压安装包:$ tar xzf redis-5.0.5.tai.gz
  4. 进入解压后的文件夹$ cd redis-5.0.5
  5. 编译:$ make 这一步要等一会,编译要几分钟,喝杯茶吧
    在这里插入图片描述
  6. 运行服务器$ src/redis-serve --daemonize yes 注意daemonize参数代表是否以多线程方式启动,如果没有参数的话,就是默认是单线程,这样这一台机器只能开起服务器,不能运行客户端,只能通过网络连接别的客户端。
    在这里插入图片描述
  7. 运行客户端$ src/redis-cli并输入PING看看是否连通
    在这里插入图片描述
    这样我们就开始运行了,接下来就具体的使用了

Redis的基本使用

redis 有五种数据类型 字符串、哈希表、链表、集合、有序集合

字符串

每个数据都有key和value,value是String类型,但是当它为全数字,在int范围内时,可以作为数字进行加减操作。

存入

  1. > set key value 如果key存在会覆盖 > setnx key value key不存在才设置
  2. > mset key1 value1 key2 value2 ... set的批处理 > msetnx 同理

取出

  1. > get key 取出对应的value,>mget key1 key2同上
  2. > getrange key start end 取出对应value中从start到end的子串
  3. > getset key value 相当于get keyset key value
  4. > strlen key可以获得value的长度

修改

  1. > setrange key offset value 从offerset处开始用value覆盖,注意,是按字符覆盖,如果value长度小于(本来的长度-offset)那么后面的部分并不会改变(例子:先 > set abc hello> setrange abc 0 H 最后 >get abc 结果是"Hello"
  2. > append key value追加字符
  3. 如果value满足int,可以使用incr|decr key加1|减1 incrby key n可以给value加上n,n可正可负

提示:指令输入前缀(比如输入setra)之后按Tab键(setra就变成了SETRANGE)可以自动补全,多按几次就是按字典序往下翻,再也不用担心指令记不全了。

样例:(我故意不和指令的解释放在一起,就是为了让你第一次看的时候不轻松,自己动手操作一下或者脑补)

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

Key操作

在理解了key-value的存储方式后,讲一下针对key的操作

  1. > exists key查找key是否存在
  2. > del key删除key
  3. > keys pattern找到所有符合pattern(正则表达式)的key,> keys *展示所有的key
  4. > rename key newname改名

样例:
在这里插入图片描述

哈希表

相当于字符串类型的key部分是哈希表的一个对象名,这个哈希表可以存储很多个field-value,不同的哈希表对象不能相互访问,相当于字符串类型的套娃。

所以,哈希表类型的命令和字符串类型的命令很像

存入> hset key field value 取出> hget key field
相当于在原本的指令前加了一个h,然后在key指定哈希表的名字,field表示字段,value是字段的值

单独的指令

  1. > hgetall key获取哈希表中所有的字段名和字段值
  2. > hlen key获取字段的数量
  3. > hval key获取所有字段值
  4. > hkeys key获取所有字段名

样例:
在这里插入图片描述

链表

容易理解key就是链表名,链表的命令和之前的有很大不同,链表的头用L(表示left),尾用R(表示right),再脑海里想象这是一个从左到右排列的链表就可以很容易理解它的操作了

存入:

  1. > lpush key value1 value2 ...按顺序将value一个个从头插入链表 rpush就是从尾插入
  2. > linser key befor|after 元素 value将value插入到元素的前面或后面

取出:

  1. > lpop key将链表第一个元素返回并删除 rpop则是最后一个
  2. > lindex key index根据索引获取元素的值
  3. > lrange key start stop获取start-stop范围内的值,stop=-1表示获取start之后的所有值

修改删除:

  1. > lset key index value根据索引修改元素的值
  2. > lrem key count value从左开始,删掉count个值为value的元素
  3. > ltrim key start end保留start-stop范围内的元素,其他全删掉,stop=-1表示start之后所有值

样例:

在这里插入图片描述
在这里插入图片描述

集合

这个集合是无序集合,是通过哈希表实现的,增删查都是o(1),所以是不能有重复成员,一个集合最多可以储存2^32-1个成员(和int有什么关系呢?自己想想。

集合的命令如下:

  1. sadd key member1 member 2 ... 添加成员,如果有重复会自动去重
  2. scard key 获取成员个数
  3. smembers key 获取所有成员,乱序
  4. sinter key1 key2 ...获取集合的交集,sinterstore key0 key1 key2 ...将交集存在key0集合里
  5. 将上面那两条命令的"sinter"改成"sdiff"或者"sunion"就是求差和求并了
  6. spop key count随机取出count个成员并删除,不写默认为1
  7. srandmember key count随机返回count的绝对值个成员,不写count返回一个
  8. srem key member1 member2 ...删除给定的成员
  9. sismember key member判断集合里面有没有member

样例:

在这里插入图片描述
在这里插入图片描述

有序集合

有序集合和集合的区别就在有序集合的每个成员绑定了一个score,集合就通过这个score来对成员进行排序,成员不允许重复,score允许重复,相同分数按字典序排序。命令有点像是list和set的杂交

有序集合的命令如下:

  1. zadd key score1 member1 score2 member 2 ... 添加成员,如果有重复会更新score
  2. zcard key 获取成员个数 zcount key min max 分数区间内成员个数 zlexcount key min max 所有成员分数相同时用两个成员名划定区间,返回成员个数。
  3. zscore key member 获取成员的分数 zrank key member 获取成员的索引
  4. zrange key start stop [withscores]获取索引start-stop范围内的成员,加上withscores选项,返回值和分数 zrangebyscore key min max[withscore] 获取分数在min-max区间内的成员 zrangebylex key min max通过成员名获取zrevrange则是倒序
  5. zinterstore key0 keynums key1 key2 ...求keynums个集合的交集并存在key0集合里,"zunionstore"就是求求并集,默认是将相同成员的score相加
  6. zpopmax key count按分数高到低取出count个成员并删除,默认count=1,zpopmin key count从低到高,同上。
  7. zrem key member1 member2 ...删除给定的成员,类似有zrembyrank、zrembyscore、zermbylex,给定范围删除
  8. zincrby key n member给member的score加上n

样例:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

断开连接与关闭服务器

如果只是客户端不用了,要断开连接,输入quit即可。

如果要关闭服务器,在客户端输入shutdown save,关闭服务器并保存内存中的数据,然后quit关闭客户端。

用java编程连接redis

下载jedis.jar包,加入你的classpath,就可以使用了

import redis.clients.jedis.Jedis;
public Redisjava{
    public static void main(String[] args){
        String host="Redis服务器IP地址";
        int port=服务器端口;
        String password="Redis服务器密码";
        //连接Redis服务器
        Jedis redis=new Jedis(host,port);
        redis.auth(password);
        //redis就是客户端,redis.xxx(参数),xxx就是上面学到哪些命令
        String value=redis.get("你要查询的key");
        //用完记得关闭连接
        jedis.close();
    }
}

基础教程到这结束,我们就学会了通过命令行使用Redis数据库和编程使用数据库了,单客户端操作起来是没有问题的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值