什么是redis

redis本质上是一个高性能的键值数据库,是nosql数据库的一种.通常被认为是一个数据结构服务器,主要是因为其有着丰富的数据结构

redis支持的数据类型

字符串String、列表List,、集合Set、散列表Hash、有序集合Zset。

redis可以做什么

计数器,缓存,消息队列(发布/订阅功能),分布式锁实现

Redis的优点

  1. 速度快:使用标准C写,所有数据都在内存中完成,读写速度分别达到10万/20万 。
  2. 丰富的数据类型 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  3. 自动操作,对不同数据类型的操作都是自动的
  4. 快速的主从复制,保证了数据,和服务的安全性

Redis的缺点

数据库容量受到物理内存的限制

Redis的存储机制和持久化方案

RDB持久化策略 :使用快照的方式,是redis默认的方式,

原理:先将数据存储到内存,当数据到达设定的值后,触发一次转存操作

AOF持久化策略:需要手动开启.

原理:没执行一条会更改数据的命令,都会直接持久化到硬盘中指定的aof文件, 其存储的不是数据,而是执行的命令

Redis是单线程的吗

是的,redis为了效率最大化,使用内存存储方法,这样做可以避免多线程会出现的上下文切换,对于一个内存的系统来说,是没有上下文切换的问题的.

redis的使用

下载安装包,引入到Linux系统,一般会放到/usr/local/src/目录下

解压

tar -xvf redis-5.0.4.tar.gz

安装 在redis的跟目录下执行/usr/local/src/redis/src

make : 加载环境

redis added_redis added

返回上图后使用命令

make install 安装

修改redis的配置文件

命令: vim redis.conf 进入到配置文件并可以进行修改

关闭保护模式

redis added_Redis_02

开始后台运行

redis added_java_03

**启动reids服务 **启动默认的redis 端口是6379

启动命令: redis-server redis.conf

进入客户端命令: redis-cli -p 6379

exit 退出命令界面

进入客户端测试是否启动成功

关闭Redis命令:

redis-cli -p 6379 shutdown

reids 常用命令

登录 redis-cli -p 5566 -a password 检查key是否存在 EXISTS key 搜索某关键字 KSYS *4 返回一个Key所影响的vsl的类型 TYPE key

1.1 Redis命令

1.1.1 String类型

命令

说明

案例

set

添加key-value

set username admin

get

根据key获取数据

get username

strlen

根据key获取值的长度

strlen key

exists

判断key是否存在

exists name 返回1存在 0不存在

del

删除redis中的key

del key

Keys

用于查询符合条件的key

keys * 查询redis中全部的key keys n? 使用占位符获取数据 keys nam* 获取nam开头的数据

mset

赋值多个key-value

mset key1 value1 key2 value2 key3 value3

mget

获取多个key的值

mget key1 key2

append

对某个key的值进行追加

append key value

type

检查某个key的类型

type key

select

切换redis数据库

select 0-15 redis中共有16个数据库

flushdb

清空单个数据库

flushdb

flushall

清空全部数据库

flushall

incr

自动加1

incr key

decr

自动减1

decr key

incrby

指定数值添加

incrby 10

decrby

指定数值减

decrby 10

expire

指定key的生效时间 单位秒

expire key 20 key20秒后失效

pexpire

指定key的失效时间 单位毫秒

pexpire key 2000 key 2000毫秒后失效

ttl

检查key的剩余存活时间

ttl key -2数据不存在 -1该数据永不超时

persist

撤销key的失效时间

persist key

1.1.2 Hash类型

说明:可以用散列类型保存对象和属性值

例子:User对象{id:2,name:小明,age:19}

命令

说明

案例

hset

为对象添加数据

hset key field value

hget

获取对象的属性值

hget key field

hexists

判断对象的属性是否存在

HEXISTS key field 1表示存在 0表示不存在

hdel

删除hash中的属性

hdel user field [field …]

hgetall

获取hash全部元素和值

HGETALL key

hkyes

获取hash中的所有字段

HKEYS key

hlen

获取hash中所有属性的数量

hlen key

hmget

获取hash里面指定字段的值

hmget key field [field …]

hmset

为hash的多个字段设定值

hmset key field value ,[field value …]

hsetnx

设置hash的一个字段,只有当这个字段不存在时有效

HSETNX key field value

hstrlen

获取hash中指定key的值的长度

HSTRLEN key field

hvals

获取hash的所有值

HVALS user

1.1.3 List类型

说明:Redis中的List集合是双端循环列表,分别可以从左右两个方向插入数据.

List集合可以当做队列使用,也可以当做栈使用

队列:存入数据的方向和获取数据的方向相反

栈:存入数据的方向和获取数据的方向相同

命令

说明

案例

lpush

从队列的左边入队一个或多个元素

LPUSH key value [value …]

rpush

从队列的右边入队一个或多个元素

RPUSH key value [value …]

lpop

从队列的左端出队一个元素

LPOP key

rpop

从队列的右端出队一个元素

RPOP key

lpushx

当队列存在时从队列的左侧入队一个元素

LPUSHX key value

rpushx

当队列存在时从队列的右侧入队一个元素

RPUSHx key value

lrange

从列表中获取指定返回的元素

LRANGE key start stop Lrange key 0 -1 获取全部队列的数据

lrem

从存于 key 的列表里移除前 count 次出现的值为 value 的元素。 这个 count 参数通过下面几种方式影响这个操作: · count > 0: 从头往尾移除值为 value 的元素。 · count < 0: 从尾往头移除值为 value 的元素。 · count = 0: 移除所有值为 value 的元素。

LREM list -2 “hello” 会从存于 list 的列表里移除最后两个出现的 “hello”。 需要注意的是,如果list里没有存在key就会被当作空list处理,所以当 key 不存在的时候,这个命令会返回 0。

Lset

设置 index 位置的list元素的值为 value

LSET key index value

1.1.4 Redis事务命令

说明:redis中操作可以添加事务的支持.一项任务可以由多个redis命令完成,如果有一个命令失败导致入库失败时.需要实现事务回滚.

命令

说明

案例

multi

标记一个事务开始

127.0.0.1:6379> MULTI

exec

执行所有multi之后发的命令 提交

127.0.0.1:6379> EXEC

discard

丢弃所有multi之后发的命令回滚