redis
redis在linux的安装
1.redis安装方式
yum安装(提前配置好yum源)
yum install redis -y #
源代码编译安装
rpm包手动安装
2.编译安装redis
创建一个文件夹,存redis(也可以不用创建)
mkdir linux_redis
cd linux_redis
1.在redis目录下,下载redis源代码包
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
2.解压缩redis源码包
3.编译三部曲
指定安装路径 ,生成makefile 编译文件
./configure --prefix=redis的安装路径
开始编译
make
编译安装
make install
编译完成后,默认生成可使用的redis命令
/usr/local/bin/redis-server
4.修改redis的配置文件,支持更安全的启动方式
vim redis.conf
#打开redis密码的参数
requirepass 123456789
#开启安全模式
protected-mode yes
#修改redis的默认启动端口,以及绑定地址
bind 0.0.0.0
port 6800
#过滤出非空行,注释行的内容,重定向写入到一个文件中
grep -v "^$" redis.conf |grep -v "^#" > linuxredis.conf
#在配置文件结尾加上后台启动参数
daemonize yes
5.启动redis服务端
redis-server linuxredis.conf
6.验证redis是否启动
netstat -tunlp |grep redis
ps -ef|grep redis
7.指定密码登录redis
[root@localhost redis-5.0.7]# redis-cli -p 6800
127.0.0.1:6800> ping
(error) NOAUTH Authentication required
127.0.0.1:6800> auth 123456789
OK
127.0.0.1:6800> ping
PONG
redis常用命令
redis的数据类型
字符串(strings)
哈希(hashes)
列表(lists)
集合(sets)
有序集合(sorted sets)
命令练习
基础命令
keys * 查看所有key
type key 查看key类型
expire key seconds 过期时间
ttl key 查看key过期剩余时间 -2表示key已经不存在了
persist 取消key的过期时间 -1表示key存在,没有过期时间
exists key 判断key存在 存在返回1 否则0
del keys 删除key 可以删除多个
dbsize 计算key的数量
strings类型数据相关命令
set 设置key
get 获取key
append 追加string
mset 设置多个键值对
mget 获取多个键值对
del 删除key
incr 递增+1
decr 递减-1
127.0.0.1:6800> set name 'bajie' #设置key
127.0.0.1:6800> get name #获取key的值
"bajie"
127.0.0.1:6800> set name 'pig' #覆盖key
OK
127.0.0.1:6800> get name
"pig"
127.0.0.1:6800> APPEND name 'dsb' #追加key的string ,不区分大小写
(integer) 6
127.0.0.1:6800> get name
"pigdsb"
127.0.0.1:6800> mset name1 'monkey' name2 'tangseng' #设置多个键值对
OK
127.0.0.1:6800> keys *
1) "name2"
2) "name1"
3) "name"
127.0.0.1:6800> mget name name1 name2 #获取多个value
1) "pigdsb"
2) "monkey"
3) "tangseng"
127.0.0.1:6800> del name2 #删除key
(integer) 1 #删除一个不存在的key,结果为nil
127.0.0.1:6800> keys *
1) "name1"
2) "name"
127.0.0.1:6800> set num 10
OK
127.0.0.1:6800> get num
"10"
#string类型实际上不仅仅包括字符串类型,还包括整型,浮点型。redis可对整个字符串或字符串一部分进行操作,而对于整型/浮点型可进行自增、自减操作。
127.0.0.1:6379> incr num #给num string 加一 INCR 命令将字符串值解析成整型,将其加一,最后将结果保存为新的字符串值,可以用作计数器
(integer) 11
127.0.0.1:6800> get num
"11"
127.0.0.1:6800> decr num #递减1
(integer) 10
127.0.0.1:6800> decr num #递减1
(integer) 9
127.0.0.1:6800> get num
"9"
hashes哈徐数据相关命令
哈希结构就是 k1 -> k1 : v1 如同字典 套字典 { k1 : { k2: v2 } } ,取出v2 必须 k1,取出k2
hashes即哈希。哈希是从redis-2.0.0版本之后才有的数据结构。
hashes存的是字符串和字符串值之间的映射,比如一个用户要存储其全名、姓氏、年龄等等,就很适合使用哈希。
hset 设置散列值
hget 获取散列值
hmset 设置多对散列值
hmget 获取多对散列值
hsetnx 如果散列已经存在,则不设置(防止覆盖key)
hkeys 返回所有keys
hvals 返回所有values
hlen 返回散列包含域(field)的数量
hdel 删除散列指定的域(field)
hexists 判断是否存在
127.0.0.1:6800> hset news title 'first news title'
(integer) 1
#设置第一条新闻 news的id为1,添加数据title的值是"first news title"
127.0.0.1:6800> hset news content 'first news content'
(integer) 1
#添加一个conntent内容
127.0.0.1:6800> hget news title #获取new的标题
"first news title"
127.0.0.1:6800> hget news content #获取new的内容
"first news content"
127.0.0.1:6800> hmget news title content #获取news的标题和内容
1) "first news title"
2) "first news content"
127.0.0.1:6800> hmset news1 title 'second news title' content 'second content'
OK
127.0.0.1:6800> hmget news1 title content
1) "second news title"
2) "second content"
#分别同时设置标题和内容并获取标题和内容
127.0.0.1:6800> hkeys news #获取news的key
1) "title"
2) "content"
127.0.0.1:6800> hvals news #获取news的值
1) "first news title"
2) "first news content"
127.0.0.1:6800> hlen news #获取news的长度
(integer) 2
127.0.0.1:6800> hdel news title #删除news的标题title
(integer) 1
127.0.0.1:6800> hlen news #检查一下长度
(integer) 1
127.0.0.1:6800> HEXISTS news title #判断news中是否有title,不存在返回0,存在返回1
(integer) 0
lists列表相关命令
lpush 从列表左边插
rpush 从列表右边插
lrange 获取一定长度的元素 lrange key start stop
ltrim 截取一定长度列表
lpop 删除最左边一个元素
rpop 删除最右边一个元素
lpushx/rpushx key存在则添加值,不存在不处理
127.0.0.1:6800> lpush users 'bajie' 'monkey' 'tagnseng' #新建一个users,从左边放入三个元素
(integer) 3
127.0.0.1:6800> llen users #查看users长度
(integer) 3
127.0.0.1:6800> lrange users 0 -1 #查看users所有元素
1) "tagnseng"
2) "monkey"
3) "bajie"
127.0.0.1:6800> rpush users 'shasha' #从右边插入shasha
(integer) 4
127.0.0.1:6800> lrange users 0 -1 #查看users的所有元素
1) "tagnseng"
2) "monkey"
3) "bajie"
4) "shasha"
127.0.0.1:6800> lpop users #删除左边第一个元素
"tagnseng"
127.0.0.1:6800> lrange users 0 -1
1) "monkey"
2) "bajie"
3) "shasha"
127.0.0.1:6800> rpop users #删除右边第一个元素
"bajie"
sets集合相关命令
redis的集合,是一种无序的集合,集合中的元素没有先后顺序。
集合相关的操作也很丰富,如添加新元素、删除已有元素、取交集、取并集、取差集等。我们来看例子:
sadd/srem 添加/删除 元素
sismember 判断是否为set的一个元素
smembers 返回集合所有的成员
sdiff 返回一个集合和其他集合的差异
sinter 返回几个集合的交集
sunion 返回几个集合的并集
127.0.0.1:6800> sadd class bajie monkey #添加集合,有三个元素,不加引号就当做字符串处理
(integer) 2
127.0.0.1:6800> SMEMBERS class #查看集合class成员
1) "monkey"
2) "bajie"
127.0.0.1:6800> srem class monkey #删除class的monkey
(integer) 1
127.0.0.1:6800> SMEMBERS class
1) "bajie"
127.0.0.1:6800> SISMEMBER class bajie
(integer) 1
127.0.0.1:6800> SISMEMBER class monkey
(integer) 0
127.0.0.1:6800>
#返回改是否是class的成员信息,不存在返回0,存在返回1
127.0.0.1:6800> sadd class monkey #再把monkey加入class
(integer) 1
127.0.0.1:6800> sadd class2 bajie shasha #添加新集合zoo2
(integer) 2
127.0.0.1:6800> SMEMBERS class2
1) "shasha"
2) "bajie"
127.0.0.1:6800> sdiff class class2 #找出集合class中有的,而class2中没有的元素
1) "monkey"
127.0.0.1:6800> sdiff class2 class #找出集合class2中有的,而class中没有的元素
1) "shasha"
127.0.0.1:6800> sinter class class2 #找出class和class2的交集,都有的元素
1) "bajie"
127.0.0.1:6800> SUNION class class2 #找出class和class2的并集,所有的不重复的元素
1) "shasha"
2) "bajie"
3) "monkey"
sorted sets有序集合相关命令
都是以z开头的命令
zset的每一个成员都有一个分数与之对应,并且分数是可以重复的。有序集合的增删改由于有啦排序,执行效率就是非常快速的,即便是访问集合中间的数据也是非常高效的。
用来保存需要排序的数据,例如排行榜,成绩,工资等。
利用有序集合的排序,排序学生的成绩
127.0.0.1:6800> ZADD class_test 70 'bajie'
(integer) 1
127.0.0.1:6800> ZADD class_test 80 'monkey'
(integer) 1
127.0.0.1:6800> ZADD class_test 75 'shasha'
(integer) 1
127.0.0.1:6800> ZADD class_test 99 'tangseng'
(integer) 1
排行榜,zreverange 倒叙 zrange正序
127.0.0.1:6800> ZREVRANGE class_test 0 -1 withscores
1) "tangseng"
2) "99"
3) "monkey"
4) "80"
5) "shasha"
6) "75"
7) "bajie"
8) "70"
127.0.0.1:6800> ZRANGE class_test 0 -1 withscores
1) "bajie"
2) "70"
3) "shasha"
4) "75"
5) "monkey"
6) "80"
7) "tangseng"
8) "99"
移除有序集合class_test中的成员,bajie给移除掉
127.0.0.1:6800> ZREM class_test bajie
(integer) 1
127.0.0.1:6800> ZRANGE class_test 0 -1 withscores
1) "shasha"
2) "75"
3) "monkey"
4) "80"
5) "tangseng"
6) "99"
返回有序集合class_test的基数
127.0.0.1:6800> ZCARD class_test
(integer) 3
返回成员的score值
127.0.0.1:6800> ZSCORE class_test monkey
"80"