一、Redis概述

Redis 开源 遵循BSD 基于内存数据存储 被用于作为 数据库 缓存 消息中间件

  • 总结: redis是一个内存型的非关系型数据库

 

redis特点

  • Redis是一个高性能key/value内存型数据库 在redis中,所有的数据形式都是以键值对的方式来存储的
  • Redis支持丰富的数据类型 string,list,set,sorted set,hash 指的是键值对中的值的类型
  • Redis支持持久化 持久化:将数据落盘,明天会详细说一说redis中的持久化
  • Redis单线程,单进程 由于是单线程和单进程的,所以它的线程是安全的,我们之前说的java中的多线程安全在分布式中不起作用,当时只针对一个JVM中是有效的。

 

二、Redis安装

 

# 0.准备环境
- vmware 12.x+
- centos7.x+

 

# 1.下载redis源码包
- https://redis.io/

# 2.下载完整源码包
- redis-7.0.0.tar.gz

# 3.将下载redis资料包上传到Linux中

# 4.解压缩文件
[root@localhost ~]# tar -zxvf redis-7.0.10.tar.gz
[root@localhost ~]# ll

redis底层是由C语言编写的
# 5.安装gcc
- yum install -y gcc

# 6.进入解压缩目录执行如下命令
# 注意。一定要在Makefile文件的同目录下使用下面的命令对redis做编译(切记:不要make test)
- yum install -y tcl
- make MALLOC=libc

# 7.编译完成后执行如下命令
- make install PREFIX=/usr/local/soft/redis

# 8.进入/usr/redis目录启动redis服务
- ./redis-serv

windows查看本地redis用户名和密码_redis

# 9.Redis服务端口默认是 6379
ps aux|grep redis

# 10.进入bin目录执行客户端连接操作
- ./redis-cli -h localhost –p 6379
# 如果是在一台机器上,可以省略后面的
- ./redis-cli

windows查看本地redis用户名和密码_数据库_02

# 11.连接成功出现上面界面连接成功

 

 

三、Redis数据库相关指令

 

# 1. redis服务启动的时候,如果单纯的就是redis-server命令启动,默认启动后会占用6379的端口号


# 2. 一个redis服务相当于一个新的redis数据库


# 3.修改端口号
一台机器上可以同时启动多个redis服务,只要每个redis服务所占用的端口号不同即可,要想启动多个redis服务,就必须去修改端口号
在哪修改呢?在linux中,绝大部分的框架组件要想修改参数的话,可以去找到对应软件的配置文件,然后做修改
redis服务启动的时候会默认应用一个配置文件,默认服务启动的时候会去编译好的目录下找到一个叫做redis.conf的文件,并非是安装目录
只要是单纯的使用redis-server启动的话,都会去编译好的目录下找到一个叫做redis.conf的文件去启动,即便是修改了端口号,也是只能启动一个redis服务。
修改redis.conf文件中的port 6379---> port xxxx
指定端口号启动命令:redis-server /xxx/xx/redis.conf

# 4. 配置环境变量,为了可以在任意目录下执行redis命令
vim /etc/profile

修改配置文件:
export JAVA_HOME=/usr/local/soft/jdk1.8.0_171
export REDIS_HOME=/usr/local/soft/redis
export PATH=.:$PATH:$JAVA_HOME/bin:$REDIS_HOME/bin

保存退出:
:wq

让环境变量生效
source /etc/profile


# 5. 客户端指定服务链接
如果就默认的redis-cli链接的话,默认连接的是本机localhost(127.0.0.1)的6379端口号的redis服务
指定连接某一台机器上的某个端口号的redis服务
redis-cli -h 服务器的ip地址 -p 端口号
举例:redis-cli -h localhost -p 7000


# 6. 查看当前数据库中的所有键 key *


# 7. 数据库的概念
对于一个redis服务而言,包含默认有16个数据库给我们使用,从0开始编号,共15号数据库,默认使用的是0号数据库
切换库,select 库号 举例:使用1号库:select 1
库和库之间数据不共享
库和库之间的键可以重名

 

 

1、数据库操作指令

 

# 1.Redis中库说明
- 使用redis的默认配置器动redis服务后,默认会存在16个库,编号从0-15 配置文件中有个database相关的
- 可以使用select 库的编号 来选择一个redis的库

# 2.Redis中清空库的指令
- 清空当前的库  FLUSHDB
- 清空全部的库  FLUSHALL

# 3.redis客户端显示中文
-    ./redis-cli  -p 7000 --raw

 

 

2 、操作key相关指令

 

 

# 1.DEL指令
- 语法 :  DEL key [key ...] 
- 作用 :  删除给定的一个或多个key 。不存在的key 会被忽略。多个key之间使用空格隔开
- 可用版本: >= 1.0.0
- 返回值: 被删除key 的数量。 

# 2.EXISTS指令
- 语法:  EXISTS key
- 作用:  检查给定key 是否存在。多个key之间使用空格隔开,只要有一个key存在,返回值就是1 新版本中会提示几个键存在
- 可用版本: >= 1.0.0
- 返回值: 若key 存在,返回的是存在的个数。 

# 3.EXPIRE 只能对已经存在的key设置过期时间
- 语法:  EXPIRE key seconds
- 作用:  为给定key 设置生存时间,当key 过期时(生存时间为0 ),它会被自动删除。
- 可用版本: >= 1.0.0
- 时间复杂度: O(1)
- 返回值:设置成功返回1 。

# 4.KEYS
- 语法 :  KEYS pattern
- 作用 :  查找所有符合给定模式pattern 的key 。
- 语法:
    KEYS * 匹配数据库中所有key 。
    KEYS h?llo 匹配hello ,hallo 和hxllo 等。
    KEYS h*llo 匹配hllo 和heeeeello 等。
    KEYS h[ae]llo 匹配hello 和hallo ,但不匹配hillo 。特殊符号用 "\" 隔开
- 可用版本: >= 1.0.0
- 返回值: 符合给定模式的key 列表。

# 5.MOVE
- 语法 :  MOVE key db  (move name 1----将name键移动到1号库)
- 作用 :  将当前数据库的key 移动到给定的数据库db 当中。
- 可用版本: >= 1.0.0
- 返回值: 移动成功返回1 ,失败则返回0 。

# 6.PEXPIRE
- 语法 :  PEXPIRE key milliseconds
- 作用 :  这个命令和EXPIRE 命令的作用类似,但是它以毫秒为单位设置key 的生存时间,而不像EXPIRE 命令那样,以秒为单位。
- 可用版本: >= 2.6.0
- 时间复杂度: O(1)
- 返回值:设置成功,返回1  key 不存在或设置失败,返回0

# 7.PEXPIREAT
- 语法 :  PEXPIREAT key milliseconds-timestamp
- 作用 :  这个命令和EXPIREAT 命令类似,但它以毫秒为单位设置key 的过期unix 时间戳,而不是像EXPIREAT那样,以秒为单位。
- 可用版本: >= 2.6.0
- 返回值:如果生存时间设置成功,返回1 。当key 不存在或没办法设置生存时间时,返回0 。(查看EXPIRE 命令获取更多信息)

# 8.TTL
- 语法 :   TTL key
- 作用 :   以秒为单位,返回给定key 的剩余生存时间(TTL, time to live)。
- 可用版本: >= 1.0.0
- 返回值:
    当key 不存在时,返回-2 。
    当key 存在但没有设置剩余生存时间时,返回-1 。
    否则,以秒为单位,返回key 的剩余生存时间。
- Note : 在Redis 2.8 以前,当key 不存在,或者key 没有设置剩余生存时间时,命令都返回-1 。

# 9.PTTL
- 语法 :  PTTL key
- 作用 :  这个命令类似于TTL 命令,但它以毫秒为单位返回key 的剩余生存时间,而不是像TTL 命令那样,以秒为单位。
- 可用版本: >= 2.6.0
- 返回值: 当key 不存在时,返回-2 。当key 存在但没有设置剩余生存时间时,返回-1 。
- 否则,以毫秒为单位,返回key 的剩余生存时间。
- 注意 : 在Redis 2.8 以前,当key 不存在,或者key 没有设置剩余生存时间时,命令都返回-1 。

# 10.RANDOMKEY
- 语法 :  RANDOMKEY
- 作用 :  从当前数据库中随机返回(不删除) 一个key 。
- 可用版本: >= 1.0.0
- 返回值:当数据库不为空时,返回一个key 。当数据库为空时,返回nil 。

# 11.RENAME
- 语法 :  RENAME key newkey
- 作用 :  将key 改名为newkey 。当key 和newkey 相同,RENAME 命令将覆盖旧值。如果键不存在,才报错
- 可用版本: >= 1.0.0
- 返回值: 改名成功时提示OK ,失败时候返回一个错误。

# 12.TYPE
- 语法 :  TYPE key
- 作用 :  返回key 所储存的值的类型。
- 可用版本: >= 1.0.0
- 返回值:
    none (key 不存在)
    string (字符串)
    list (列表)
    set (集合)
    zset (有序集)
    hash (哈希表)

 

 

3 、String类型

windows查看本地redis用户名和密码_Redis_03

 

注意:redis key只能为String类型 value可为:String list set zset hash

命令

说明

set

设置一个key/value

get

根据key获得对应的value

mset

一次设置多个key value

mget

一次获得多个key的value

getset

获得原始key的值,同时设置新值

strlen

获得对应key存储value的长度

append

为对应key的value追加内容

getrange 索引0开始

截取value的内容 到末尾-1 [开始,结束]

setex

设置一个key存活的有效期(秒)

psetex

设置一个key存活的有效期(毫秒)

setnx

存在不做任何操作,不存在添加

msetnx原子操作(只要有一个存在不做任何操作)

可以同时设置多个key,只有有一个存在都不保存

decr

进行数值类型的-1操作

decrby

根据提供的数据进行减法操作

Incr

进行数值类型的+1操作

incrby

根据提供的数据进行加法操作

Incrbyfloat

根据提供的数据加入浮点数(不是四舍五入)

 

 

 

 

 

4、 List类型

 

list 列表 相当于java中list 集合 特点 元素有序(插入和取出的顺序一致) 且 可以重复,key还是一个字符串,值是一个list

命令说明lpush将某个值加入到一个key列表头部 lpush list1 xiaohu xiaohei xiaoming 当列表不存在的时候会进行创建lpushx同lpush,但是必须要保证这个key存在 必须在列表进行存在的情况下从左插入rpush将某个值加入到一个key列表末尾rpushx同rpush,但是必须要保证这个key存在lpop返回和移除列表左边的第一个元素rpop返回和移除列表右边的第一个元素lrange获取某一个下标区间内的元素 lrange list 0 -1llen获取列表元素个数lset设置某一个指定索引的值(索引必须存在)lindex获取某一个指定索引位置的元素lrem删除重复元素ltrim保留列表中特定区间内的元素linsert在某一个元素之前,之后插入新元素

 

 

 

5 、Set类型

特点: Set类型 Set集合 元素无序 不可以重复

命令

说明

sadd

为集合添加元素

smembers

显示集合中所有元素 无序

scard

返回集合中元素的个数

spop

随机返回一个元素 并将元素在集合中删除

smove

从一个集合中向另一个集合移动元素 必须是同一种类型

srem

从集合中删除一个元素

sismember

判断一个集合中是否含有这个元素

srandmember

随机返回元素 后面可以加数字 表示每次返回的个数

sdiff

去掉第一个集合中其它集合含有的相同元素

sinter

求交集

sunion

求和集

 

 

6 、ZSet类型

特点: 可排序的set集合 排序 不可重复

ZSET 官方 可排序SET sortSet

 

命令

说明

zadd

添加一个有序集合元素 zadd zset 2 xiaohu 3 xiaohu2

zcard

返回集合的元素个数

zrange 升序 zrevrange 降序

返回一个范围内的元素 如果想看看分数 withscores

zrangebyscore

按照分数查找一个范围内的元素 zrangebyscore zset 0 20 withscores limit 0 2

zrank

返回排名

zrevrank

倒序排名

zscore

显示某一个元素的分数

zrem

移除某一个元素

zincrby

给某个特定元素加分

 

 

7、 hash类型

特点: value 是一个map结构 存在key value key 无序的

redis key(String) value(map)

Map<String,Map<String,value>> map

举例:map name zhangsan

 

 

命令

说明

hset

设置一个key/value对

hget

获得一个key对应的value

hgetall

获得所有的key/value对

hdel

删除某一个key/value对

hexists

判断一个key是否存在

hkeys

获得所有的key

hvals

获得所有的value

hmset

设置多个key/value

hmget

获得多个key的value

hsetnx

设置一个不存在的key的值

hincrby

为value进行加法运算(只能针对数值做运行)

hincrbyfloat

为value加入浮点值

 

 

 四、Redis可视化工具

RedisInsight

redis-desktop-manager

Another-Redis-Desktop-Manager

三种可视化工具任意选择

连接报错可检查防火墙,以及端口号是否被占用

以及检查修改redis配置文件
1.1.找到redis配置文件vim /use/local/soft/redis-7.0.0/redis.conf

1.2.修改 protected-mode yes 改为:protected-mode no

1.3.注释掉 #bin 127.0.0.1

1.4.修改redis.conf timeout 大于0

1.5.重启redis   redis-server   /use/local/soft/redis-7.0.0/redis.conf