一、简介
【概述】
redis
是一种nosql
数据库,他的数据是保存在内存中,同时redis
可以定时把内存数据同步到磁盘,即可以将数据持久化,并且他比memcached
支持更多的数据结构(string
,list列表[队列和栈]
,set[集合]
,sorted set[有序集合]
,hash(hash表)
)。相关参考文档:http://redisdoc.com/index.html
【使用场景】
- 登录会话存储:存储在
redis
中,与memcached
相比,数据不会丢失。 - 排行版/计数器:比如一些秀场类的项目,经常会有一些前多少名的主播排名。还有一些文章阅读量的技术,或者新浪微博的点赞数等。
- 作为消息队列:比如
celery
就是使用redis
作为中间人。 - 当前在线人数:还是之前的秀场例子,会显示当前系统有多少在线人数。
- 一些常用的数据缓存:比如我们的
BBS
论坛,板块不会经常变化的,但是每次访问首页都要从mysql
中获取,可以在redis
中缓存起来,不用每次请求数据库。 - 把前200篇文章缓存或者评论缓存:一般用户浏览网站,只会浏览前面一部分文章或者评论,那么可以把前面200篇文章和对应的评论缓存起来。用户访问超过的,就访问数据库,并且以后文章超过200篇,则把之前的文章删除。
- 好友关系:微博的好友关系使用
redis
实现。 - 发布和订阅功能:可以用来做聊天软件。
二、redis日常操作命令
【安装】
编译安装 :
安装前要打开httpd(80端口)
wget http://download.redis.io/releases/redis-5.0.0.tar.gz
tar -zxvf redis-5.0..tar.gz
yum install gcc #编译安装
yum install gcc-c++
make #编译的时候要cd redis-5.0.0 && make PREFIX=/usr/local/redis && make install
mkdir /usr/local/redis5/etc/
cp src/redis-server /usr/bin/
cp src/redis-cli /usr/bin/
启动:加&后台运行,不加退出就停止运行了。所以要后台运行
redis-server &
查看服务是否开启
ps -ef | grep redis
退出
kill -9 进程
yum安装
安装
yum install -y redis
重启
systemctl restart redis
配置文件
/etc/redis.conf
【连接】
redis-cli -p -h 127.0.0.1
6379是redis服务的端口
【添加】
【字符串】:创建时如果不存在直接创建,存在就覆盖旧值;设置过期时间,默认时间永久;时间到了数据自动消失
192.168.42.7:> set username jamhsiao
OK
192.168.42.7:> set username haha
OK
192.168.42.7:> get username
"haha"
192.168.42.7:> del username
(integer)
192.168.42.7:> get username
(nil)
192.168.42.7:> set username janhsiao ex
OK
192.168.42.7:> ttl username 查看过期时间
(integer)
192.168.42.7:> ttl username
(integer)
192.168.42.7:> keys * 查看所有的关键字
) "name"
) "music"
字符串
【列表】可重复,有序,可以多个添加。添加是如果key不存在,就直接创建;如果存在且不是列表类型,将返回一个错误。
192.168.42.7:> lpush book love
(integer)
192.168.42.7:> lpush book love phy keben
(integer)
192.168.42.7:> lrange book - #0表示头,-1表示尾
) "keben"
) "phy"
) "love"
) "love"
192.168.42.7:> rpush name xiao 与字符串重名,返回错误
(error) WRONGTYPE Operation against a key holding the wrong kind of value
192.168.42.7:> lpop book 取头元素
"keben"
192.168.42.7:> rpop book 取尾元素,取出列表中就不存在
"love"
192.168.42.7:> lindex book 下标取值,列表元素依旧存在
"phy"
192.168.42.7:> llen book
(integer)
192.168.42.7:> lrem book phy 删除phy
(integer)
192.168.42.7:> lrem key count value
count > :从表头开始向表尾搜索,移除与value相等的元素,数量为count。
count < :从表尾开始向表头搜索,移除与 value相等的元素,数量为count的绝对值。
count = :移除表中所有与value 相等的值。
列表
【集合】不能重复,无序,可多个添加
192.168.42.7:> sadd user jam hsiao daisy tony tom cat
(integer)
192.168.42.7:> smembers user
) "jam"
) "daisy"
) "hsiao"
) "tony"
) "cat"
) "tom"
192.168.42.7:> srem user tony 删除
(integer)
192.168.42.7:> scard user 查看个数
(integer)
192.168.42.7:> sadd username jamhsiao jam tenggege xiao jing teng daisy
(integer)
192.168.42.7:> sinter user username 交集
) "daisy"
) "jam"
192.168.42.7:> sunion user username 并集
) "cat"
) "tom"
) "jam"
) "daisy"
) "hsiao"
) "jing"
) "jamhsiao"
) "xiao"
) "tenggege"
) "teng"
192.168.42.7:> sdiff user username 差集,以左边为准
) "tom"
) "cat"
) "hsiao"
192.168.42.7:> sdiff username user
) "xiao"
) "jamhsiao"
) "jing"
) "tenggege"
) "teng"
集合
【哈希表】key值可以重复,feild不可重复,相当于字典里包含字典
192.168.42.7:> hset classes student jam
(integer)
192.168.42.7:> hset classes student hsiao
(integer)
192.168.42.7:> hset classes students hsiao
(integer)
192.168.42.7:> hget classes student
"hsiao"
192.168.42.7:> hdel classes student
(integer)
192.168.42.7:> hgetall classes 查看所有,以字典的形式列出
) "students"
) "hsiao"
192.168.42.7:> hset classes s jam
(integer)
192.168.42.7:> hset classes st jam
(integer)
192.168.42.7:> hset classes stu jam
(integer)
192.168.42.7:> hset classes stud jam
(integer)
192.168.42.7:> hset classes stude jam
(integer)
192.168.42.7:> hgetall classes
) "students"
) "hsiao"
) "s"
) "jam"
) "st"
) "jam"
) "stu"
) "jam"
) "stud"
) "jam"
) "stude"
) "jam"
192.168.42.7:> hkeys classes
) "students"
) "s"
) "st"
) "stu"
) "stud"
) "stude"
192.168.42.7:> hvals classes
) "hsiao"
) "jam"
) "jam"
) "jam"
) "jam"
) "jam"
192.168.42.7:> hlen classes
(integer)
192.168.42.7:> hdel classes stu
(integer)
192.168.42.7:> hexists classes student
(integer)
192.168.42.7:> hexists classes stud
(integer)
哈希表
【事务】
开始事务 : multi
执行事务 : exec
回滚事务 : discard
事务