1、什么是redislinux
redis是一个开源的,内存中的数据结构存储系统,key-value的非关系型数据库,它能够做为数据库,缓存和消息中间件,支持持久化。redis
2、redis的安装和卸载shell
1.版本为奇数的是不稳定版本。为偶数的是稳定版本。数据库
2.官网下载redis,也可一在linux中使用wget命令下载;wget -P 存放位置 redis的下载路径。json
3.在linux下进行解压:tar -xvf redis缓存
4.经过./redis-server 启动redis,要使用客户端链接redis 不能直接在当前窗口中链接,使用Xshell 从新打开一个窗口,进入到redis目录,运行./redis-cli,输入keys *能够查看tomcat
5.若是想在同一个窗口启动客户端,须要复制(cp 源文件 目标位置) redsi.conf,而后修改redis.conf中的 daemonize 的值为yes(设置redis为守护进程),此时能够经过 redis-server redis.conf启动redis,而后再启动客户端 ./redis-cli数据结构
6.退出redis 可使用 ps-ef|grep redis 查看redis的端口,而后使用kill 杀死进程 (kill -p 进程id);并发
7.卸载:直接删除redis 文件便可 (rm -rf redis) 强制删除。分布式
3、redis的数据结构
1.字符串类型:String key是字符串类型,value是字符串类型
启动redis的客户端
单值缓存
set key value
get key 若是不存在key 则返回nil
在redis的官方文档中---命令中包含这些命令
对象缓存
set user :1 value(json格式数据) (1是这一条数据的主键,根据响应的条数变换,value是数据库中的一条数据)
mset user:1:name zhagnsan user:1:balance 180 (批量存储----将数据库中的一整条数据所有按照键值对的形式存储)
mget user:1:name user:1:balance (批量获取)
分布式锁:
应用场景(好比用户下单某个商品,那该商品对应的库存是否是应该相应的减1呢?一个用户用set没有问题,可是,若是多个用户同时下单,不一样的tomcat都去执行set操做,那他们拿到的库存值是同样的,执行减1的操做以后,结果就是多个用户购买商品,库存只减了一次,而用setnx,第一个tomcat在setnx库存的时候,其余tomcat在去设置的时候,就会返回0 ,这样就解决了上述问题,在setnx使用完以后,del 释放一下)
setnx product:100 true 返回1表明获取锁成功(setnx和set的区别是 setnx发现有key存在的时候,不会更新)
setnx product:100 true 返回0表明获取锁失败
del product :100 执行完业务释放锁
计数器:
incr key 将key中存储的数字值加1 eg:incr 文章名:阅读量:100(redis是单线程的,能防止并发问题,他会按照访问的前后顺序将他们放到队列中,按顺序执行)
decr key 将key中存储的数字值减1
incrby key increment 将key中存储的值加上increment
decrby key decrement 将key中存储的值减去 decrement
2.哈希:hash
hash类型设置语法:hset 键 field value;一个键能够有不少个field,很适合存储一个对象
eg:一个hash存user键,有name和age两个字段:
hset user name xxx;
hset user age xxx;
hkeys user ;查看这个键有哪些字段
hlen user ;查看这个键的字段长度
hget user name ;获取name的值
3.list
redis支持list数据结构,底层是一个双向链表,容许重复值存在,按照插入顺序保存,可使用lpush从左边插入,也可使用rpush从右边插入。lpop从左边弹出,rpop从右边弹出,从而实现FIFO队列思想(先进先出,从左边插入,右边弹出,插入和弹出方向不一样,就能够实现。),插入和弹出方向相同,实现栈的思想
eg:
lpush hobbys xxx
lpush hobbys yyy
lpush hobbys zzz
lrange hobbys 0 -1 ; 查看存放的值的个数
rpop hobbys (从右边弹出,实现队列思想---先进先出)
lpop bobbys (从左边弹出,实现栈的思想 --先进后出)
4.set
redsi 的set 是String 类型的无序集合,集合成员是惟一的。这就意味着集合中不能出现重复的数据。
eg:
sadd num 1 插入set集合
sadd num 2
sadd num 3
SMEMBERS num 查看set集合中的数据
spop num 弹出set集合中的数据(弹出来的值是随机的)
5.有序集合 :sorted set
sorted set 是set 的升级,它在set的基础上增长了一个顺序属性。这一属性在修改添加元素的时候能够指定,每次指定后,zset会自动重新按新的值调整顺序。
eg:
zadd person 1 xxx 插入 有序结合
zadd person 2 yyy
zadd person 3 zzz
zrange person 0 -1 查看有序集合中的数据(此时会根据分数排序 zrange person 0 -1 withscores 会把值对应的分数值打印出来)
若是在插入的时候,分数值相同,会根据插入的值进行字典排序
zadd person 3 sss
zadd person 3 ddd
zadd person 3 aaa
zrange person 0 -1 withscores 9查询的结果是 aaa 3 ddd 3 sss 3
zrem person xxx; 删除一个指定的命令