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
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 | 逆序 |