redis基础一

早过忘川 提交于 2020-02-16 18:25:20

1、redis是什么?

Redis是一个高性能的key/value 非关系型的内存数据库,基于C语言编写。

    1)、单进程、线程的工作机制;

    2)、采用Reactor模式,基于事件驱动(文件事件和时间事件),使用I/O的多路复用程序来同时监听多个套接字;

    3)、支持主从复制 or 集群;

    4)、满足CPA(C:强一致性、P:分区容错、A:高可用)理论中的 CP理论。像zk也是满足CAP中的CP(分布式系统中A和C几乎不能共存)。

 

2、redis功能

1)、Redis支持数据的持久化,可以把数据保存到磁盘上,重启的时候可以再次加载数据进行使用,也可以数据缓存下来并设置缓存的时间;

2)、支持多种数据类型,String,List,Set,hash,Zset

3)、支持发布/订阅模式(不建议使用,建议使用rabbitMQ、RocketMQ);

4)、服务注册中心(dubbo ,不建议使用,建议使用zk);

5)、支持分布式锁。

 

3、linux环境下如何启动redis呢?

启动服务端:

1)、修改配置文件redis.conf;

2)、进入redis安装目录下的bin目录下;

3)、 ./redis-server  /path/redis.conf (path为自定义redis.conf文件存放目录);

启动对应的客户端:

1)、进入redis安装目录下的bin目录下;

2)、redis-cli  -p  6379(也可以改为自定义的端口);

 

 

在客户端输入: config  get  * 能看到各种redis的配置信息,比如

config  get dir 查看redis的安装目录;

config  get timeout 查看redis配置的超时时间;

config  get requirepass 查看设置的密码;

对应的也可在客户端修改这些配置信息:比如修改设置的密码:

config  set 1234 ,则客户端在向redis进行任何操作都需要输入密码:

auth 1234;

这些配置参数在redis.conf配置文件里也可以修改。

 

4、常用命令介绍:

1)、DBSIZE 查看当前库的key值个数。

2)、FLUSHDB 清空当前库的key/value

3)、FLUSHALL 清空所有库的key/value

4)、info  (redis的info命令详见)

5)、config get *   查询配置文件里的信息,

6)、key的命令

命令

说明

keys  * 

列出当前库的所有key值

exists key

判断key 是否存在,0-不存在,1-存在

expire key 秒数

给存在的key设置过期时间

move key dbnumber

把当前库的key移到dbnumber的库中。0-移送失败,1-已送成功

type key

 查看key的数据类型

del key

删除key

ttl key

查询key的有效期,若key存在且没设置过期时间返回-1 ;若key存在且设置了过期时间,返回剩余过期时间;若key不存在,返回-2.

 

Redis 常用命令大全:http://redisdoc.com/

 

5、redis支持的数据类型

5.1 String

string是redis的最基本的数据类型,一个key对应一个value。String类型是二进制安全的,也就是说redis的string类型可以包含任何数据,比如jpg、序列化对象。在redis中一个value的最大大小是512M。一个key对应一个value

常用命令:

命令

说明

set k v

 设置k/v的值到redis

get k

获取k对应的value

del  k

删除k以及对应的value

append  k v

在k对应的value上追加字符串

strlen  k

返回k对应value的长度

 

INCR key

 每次把key对应的value加1

DECR key

每次把key对应的value减1

INCRBY key number

每次把key对应的value加number

DECRBY key number

每次把key对应的value减number

注意这几个命令对应的value必须是数字

getrange  k number1 number2

对应value number1-number2范围内取值

setrange k index newValue

对应value 指定位置的值被新值newValue替换

 

注意:getRange k 0 -1 表示取出全部值。

setex(set with expire)  key  秒数  value

插入key/value并设置有效期

setnx(set if no exist) key value

返回值0-表示已经存在,1-表示设置成功

 

mset k1 v1 k2 v2

一次给多个k/v 插入值到redis,key

存在即覆盖对应的value

mget k1 k2

一次从redis取出多个k/v

msetnx  k1 v1 k2 v2

一次给多个k/v 插入值到redis,只要一个key存在整体就不成功

 

5.2 List

一个key对应多个value,也就是对应一个List。

lpush  key v1 v2 v3

插入List类型的数据到redis,先入后出

rpush  key v1 v2 v3

插入List类型的数据到redis,先入先出

lrange key number1 number2

获取key对应的vlaue从number1到number2的值

lrang key 0 -1 表示取出key对应的所有值。

lpop key

从栈尾取走

rpop key

从栈首取走

lindex key number

查看key对应的value第number个数据

llen key

返回key对应的value的个数

lrem key  

 删除n个指定的值

ltrim key number1 number2

截取掉key对应value的number1到number2的值赋值给key对应的value

 

表示删除 list02中的1个“3”。

 

lset key index value

把key对应value的第index值换为vlaue

linsert key before/after v1 v2

在v1前/后插入v2

 

5.3 Set

一个key对应一个Set集合,Set集合不允许有重复的值,且是无序的。

sadd  key v1 v2 v3

插入set类型数据到redis

smember key

获取key对应的value

sismember key v

检查Key包含不包含给定的value,1-包含,0-不包含

 

scard key

获取key对应的set集合元素个数

srem  key value

删除key对应的set集合中元素

Srandmember key number

 从key对应的Set集合中随机取出number个数

spop key

随机从key对应的set集合中选一个元素出栈

smove key1 key2  key1对应set集合的某值

 把key1对应set集合中的指定值移动到key2对应的集合中。

 

sdiff key1  key2

key1 有而key2没有的集合

sinter key1  key2

key1 和key2对应set集合的交集

sunion key1  key2

key1 和key2对应set集合的并集

注意:sdiff k1 k2和sdiff k2 k1 的结果很可能不一样。

sdiff k1 k2表示k1中有而k2中没有的元素,而 sdiff k2 k1 表示k2中有而k1中没有的元素,,见下图:

注意:List和Set数据,都是一个key对应多个value的形式,表面上看没啥区别,其实是有区别的,List中的key对应的value是可以重复的,而set中key对应的value是不允许重复的。

 

5.4 Hash

Redis的k/v数据结构模式不变,v对应的值也是k/v模式。

hset key key1 vlaue1

向redis插入key对应的value为key1 value1

hget key key1

获取key对应的value 再对应key1的vlaue值

hmset key key1 value1 key2 value2

 一次向redis插入key对应多个value的情况

hmget key key1 key2

获取key对应的value集合中的分别key1 key2对应的值

hgetall key

获取key对应的k/v 集合

hdel  key key1

删除key对应的k/v 集合中key1对应的值

hlen key

返回key对应的k/v集合的个数

hKeys key

获取key对应的k/v集合中所有k的值

hvals key

获取key对应的k/v集合中所有v的值

 

5.5 Zset

sorted  set ,和set集合类似,但是k对应的value也是K/V形式的,

zadd key score1 v1 score2 v2

插入zset数据到redis,score必须是有序的

zrange key (withscores)

查看插入的k的value值

zrangebyscore  key  score1 score2

获取score1和score2之间的vlaue

zrangebyscore  key  score1 (score2

获取score1和score2之间的vlaue,不包含score2

zrangebyscore  key  score1 score2  limit n1 n2

获取score1和score2之间的vlaue基础上,对返回值从n1处截取n2个长度。

 

zrem key score对应的value值

删除该key下的score对应的值

zcard key

 统计该key下的value个数

zcount key score1 score2

统计score1~score2之间的value值

zrank  key score对应的value值

获取score对应value值的下标

zscore  key  score对应的value值

获取对应的score值

zrevrank key  score对应的value值

逆序后 score对应value值的下标

zrevrange key 

逆序

 

 

 

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!