Redis基础学习

NoSQL数据库概述

NoSQL(Not Only SQL),泛指非关系型的数据库。NoSQL不依赖业务逻辑方式存储,而以简单的key-value模式存储。因此大大的增加了数据库的扩展能力。

  1. 不遵循SQL标准;
  2. 不支持ACID;
  3. 远超于SQL的性能;

NoSQL使用场景:

  • 对数据高并发的读写;
  • 海量数据的读写;
  • 对数据的高扩展性;

NoSQL不适用场景:

  • 需要事务支持;
  • 基于sql的结构化查询存储,处理复杂的关系,需要即席查询;

Redis简介

Redis(Remote Dictionary Server),即远程数据字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

链接:redis官网redis中文官网github

Redis快的原因:

  1. 数据存储在内存中;
  2. 结构简单
  3. redis是单线程的,不用切换线程耗时;
  4. 采用复用i/o阻塞机制

Redis结构类型:

  • 字符串(Strings)
  • 散列(hashes)
  • 列表(lists)
  • 集合(sets)
  • 有序集合(sorted sets)
  • 范围查询(bitmaps, hyperloglogs)
  • 地理空间(geospatial)

Docker安装redis

docker下载redis

[root@hadoop-104 ~]# docker pull redis
Using default tag: latest
latest: Pulling from library/redis
123275d6e508: Already exists 
f2edbd6a658e: Pull complete 
66960bede47c: Pull complete 
79dc0b596c90: Pull complete 
de36df38e0b6: Pull complete 
602cd484ff92: Pull complete 
Digest: sha256:1d0b903e3770c2c3c79961b73a53e963f4fd4b2674c2c4911472e8a054cb5728
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest

启动redis

[root@hadoop-104 ~]# mkdir -p /mydata/redis/conf
[root@hadoop-104 ~]# touch /mydata/redis/conf/redis.conf
[root@hadoop-104 ~]# echo "appendonly yes"  >> /mydata/redis/conf/redis.conf
[root@hadoop-104 ~]# docker run -p 6379:6379 --name redis -v /mydata/redis/data:/data \
> -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
> -d redis redis-server /etc/redis/redis.conf
ce7ae709711986e3f90c9278b284fe6f51f1c1102ba05f3692f0e934ceca1565

查看redis是否启动成功

[root@192 conf]# ps -ef|grep redis
systemd+    3705    3688  0 21:04 ?        00:00:00 redis-server *:6379
root        4173    2897  0 21:09 pts/0    00:00:00 grep --color=auto redis

连接redis客户端,并测试redis-cli是否连接成功

[root@192 conf]# docker exec -it redis redis-cli
127.0.0.1:6379> ping
PONG

Redis操作类型

数据库操作

清空当前库

flushdb

通杀全部库

flushall

查询当前库的所有key

keys *

字符串(Strings)

  • 创建字符产 set key value(值的长度不能超过512 MB)
127.0.0.1:6379> set name alex
OK`
  • 获取字符串 get key
127.0.0.1:6379> get name
"alex"
  • 批量创建和获取字符串
127.0.0.1:6379> mset a 1 b 2 c 3 d 4
OK
127.0.0.1:6379> mget a b c
1) "1"
2) "2"
3) "3"
  • 追加字符串APPEND key value
127.0.0.1:6379> append name hahaha
(integer) 10
127.0.0.1:6379> get name
"alexhahaha"
  • 获取字符串的长度STRLEN
127.0.0.1:6379> strlen name
(integer) 10
  • 自增/自减运算 INCR/DECR
127.0.0.1:6379> strlen name
(integer) 10
  • 自增/自减指定的值 INCRBY/DECRBY(只能自增/自减可以转化成integer类型的数据,当为其他类型的时候,会报错)
127.0.0.1:6379> incr name
(error) ERR value is not an integer or out of range
127.0.0.1:6379> incr age
(integer) 19
  • 获取某个范围GETRANGE的字符串
127.0.0.1:6379> getrange name 1 2
"le"
  • 替换某个范围的字符串SETRANGE
127.0.0.1:6379> setrange name 4 qqq
(integer) 10
127.0.0.1:6379> get name
"alexqqqaha"
  • 设置过期时间SETEX
127.0.0.1:6379> setex a 5 zzz
OK
127.0.0.1:6379> expire b 10
(integer) 1
127.0.0.1:6379> ttl b
(integer) 7
127.0.0.1:6379> ttl b
(integer) -2
  • 不存在的时候才设置SETNX
127.0.0.1:6379> get c
"3"
127.0.0.1:6379> setnx c 10
(integer) 0
127.0.0.1:6379> get c
"3"
  • 获取当前的值的同时设置一个新值GETSET
127.0.0.1:6379> get c
"3"
127.0.0.1:6379> getset c 18
"3"
127.0.0.1:6379> get c
"18"

列表(lists)

  • List当中插入一个元素LPUSH/RPUSH
127.0.0.1:6379> rpush city beijing xian
(integer) 2
127.0.0.1:6379> lpush city shenyang shanghai
(integer) 4
  • List当中获取指定元素LRANGE
127.0.0.1:6379> lrange city 0 4
1) "shanghai"
2) "shenyang"
3) "beijing"
4) "xian"
  • 移出List集合中的一个元素LPOP/RPOP
127.0.0.1:6379> lrange city 0 4
1) "shanghai"
2) "shenyang"
3) "beijing"
4) "xian"
127.0.0.1:6379> lpop city
"shanghai"
127.0.0.1:6379> rpop city
"xian"
  • 移出List集合中指定的元素LREM
127.0.0.1:6379> lrange city 0 6
1) "beijing"
2) "beijing"
3) "shenyang"
4) "beijing"
127.0.0.1:6379> lrem city 2 beijing
(integer) 2
127.0.0.1:6379> lrange city 0 4
1) "shenyang"
2) "beijing"
  • 根据索引(下标)获取集合中元素值LINDEX
127.0.0.1:6379> lrange city 0 4
1) "shenyang"
2) "beijing"
127.0.0.1:6379> lindex city 2
(nil)
127.0.0.1:6379> lindex city 1
"beijing"
  • 获取List的长度LLEN
127.0.0.1:6379> llen city
(integer) 2
  • 裁剪List为原来的一部分LTRIM(直接修改原有List集合)
127.0.0.1:6379> lrange city 0 10
 1) "shenyang"
 2) "beijing"
 3) "hangzhou"
 4) "sichuan"
 5) "chengdu"
 6) "shenyang"
 7) "fushun"
 8) "anshan"
 9) "jilin"
10) "siping"
127.0.0.1:6379> ltrim city 0 5
OK
127.0.0.1:6379> lrange city 0 10
1) "shenyang"
2) "beijing"
3) "hangzhou"
4) "sichuan"
5) "chengdu"
6) "shenyang"

  • 移出列表的最后一个元素,并移动到新的列表中RPOPLPUSH
127.0.0.1:6379> rpoplpush city citypop
"shenyang"
127.0.0.1:6379> rpoplpush city citypop
(nil)
  • BRPOPLPUSH 是 RPOPLPUSH 的阻塞版本。 当 source 包含元素的时候,这个命令表现得跟 RPOPLPUSH 一模一样。 当 source 是空的时候,Redis将会阻塞这个连接,直到另一个客户端 push 元素进入或者达到 timeout 时限。 timeout 为 0 能用于无限期阻塞客户端。
127.0.0.1:6379> brpoplpush city citypop 2
(nil)
(2.04s)

集合(Set)

  • 集合中添加元素

    查看集合中的元素SMEMBERS

    判断某个元素是否存在于集合中SISMEMBER myset hello

    获取集合中元素个数SCARD

    移出集合中指定的元素值SREM

    随机获取Set集合中的值SRANDMEMBER

    随机删除集合中的一个元素SPOP

    移动指定的元素到另一个集合当中去SMOVE

    差集/交集/并集SDIFF/SINTER/SUNION

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值