目录python
1.安装redis的方式linux
-yum (删除这个yum安装的redis,咱们只用源码编译安装的) -rpm -源码编译
2.删除本来的redisredis
yum remove redis -y
3.下载redis源码数据库
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
4.解压缩vim
tar -zxf redis-4.0.10.tar.gz
5.切换redis源码目录centos
cd redis-4.0.10.tar.gz
6.编译源文件安全
make and make install 编译好后,src/目录下有编译好的redis指令 make install 安装到指定目录,
7.默认在/usr/local/bin数据结构
8.指定redis的配置文件 启动 redisapp
cd /opt/redis -4.0.10/ touch redis-6666.conf vim redis-6666.conf
内容以下ui
port 6666 #redis端口 daemonize yes #后台运行redis pidfile /data/6666/redis.pid #pid号码 loglevel notice #日志等级 logfile "/data/6666/redis.log" #日志文件存放路径 dir /data/6666 #redis数据目录 (须要手动建立) requirepass haohaio #redis的密码
9.指定配置文件启动redis服务端
redis-server redis-6666.conf
10.检查redis的进程,端口
ps -ef |grep redis netstat -tunlp |grep redis
11.登陆redis数据库
redis-cli -p 6666 登陆后 输入密码才可访问 auth haohaio
redis是一种高级的key:value存储系统,其中value支持五种数据类型
基本命令:
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的数量
decr 递减-1
127.0.0.1:6379> set name 'yu' #设置key OK 127.0.0.1:6379> get name #获取value "yu" 127.0.0.1:6379> set name 'yuchao' #覆盖key OK 127.0.0.1:6379> get name #获取value "yuchao" 127.0.0.1:6379> append name ' dsb' #追加key的string (integer) 10 127.0.0.1:6379> get name #获取value "yuchao dsb" 127.0.0.1:6379> mset user1 'alex' user2 'xiaopeiqi' #设置多个键值对 OK 127.0.0.1:6379> get user1 #获取value "alex" 127.0.0.1:6379> get user2 #获取value "xiaopeiqi" 127.0.0.1:6379> keys * #找到全部key 1) "user2" 2) "name" 3) "user1" 127.0.0.1:6379> mget user1 user2 name #获取多个value 1) "alex" 2) "xiaopeiqi" 3) "yuchao dsb" 127.0.0.1:6379> del name #删除key (integer) 1 127.0.0.1:6379> get name #获取不存在的value,为nil (nil) 127.0.0.1:6379> set num 10 #string类型实际上不单单包括字符串类型,还包括整型,浮点型。redis可对整个字符串或字符串一部分进行操做,而对于整型/浮点型可进行自增、自减操做。 OK 127.0.0.1:6379> get num "10" 127.0.0.1:6379> incr num #给num string 加一 INCR 命令将字符串值解析成整型,将其加一,最后将结果保存为新的字符串值,能够用做计数器 (integer) 11 127.0.0.1:6379> get num "11" 127.0.0.1:6379> decr num #递减1 (integer) 10 127.0.0.1:6379> decr num #递减1 (integer) 9 127.0.0.1:6379> get num
lpushx/rpushx key存在则添加值,不存在不处理
lpush duilie 'alex' 'peiqi' 'ritian' #新建一个duilie,从左边放入三个元素 llen duilie #查看duilie长度 lrange duilie 0 -1 #查看duilie全部元素 rpush duilie 'chaoge' #从右边插入chaoge lpushx duilie2 'dsb' #key存在则添加 dsb元素,key不存在则不做处理 ltrim duilie 0 2 #截取队列的值,从索引0取到2,删除其他的元素 lpop #删除左边的第一个 rpop #删除右边的第一个
redis的集合,是一种无序的集合,集合中的元素没有前后顺序。
集合相关的操做也很丰富,如添加新元素、删除已有元素、取交集、取并集、取差集等。咱们来看例子:
sunion 返回几个集合的并集
sadd zoo wupeiqi yuanhao #添加集合,有三个元素,不加引号就当作字符串处理 smembers zoo #查看集合zoo成员 srem zoo wupeiqi #删除zoo里面的alex sismember zoo wupeiqi #返回改是不是zoo的成员信息,不存在返回0,存在返回1 sadd zoo wupeiqi #再把wupeiqi加入zoo smembers zoo #查看zoo成员 sadd zoo2 wupeiqi mjj #添加新集合zoo2 sdiff zoo zoo2 #找出集合zoo中有的,而zoo2中没有的元素 sdiff zoo2 zoo #找出zoo2中有,而zoo没有的元素 sinter zoo zoo1 #找出zoo和zoo1的交集,都有的元素 sunion zoo zoo1 #找出zoo和zoo1的并集,全部的不重复的元素
都是以z开头的命令
用来保存须要排序的数据,例如排行榜,成绩,工资等。
利用有序集合的排序,排序学生的成绩
127.0.0.1:6379> ZADD mid_test 70 "alex" (integer) 1 127.0.0.1:6379> ZADD mid_test 80 "wusir" (integer) 1 127.0.0.1:6379> ZADD mid_test 99 "yuyu"
排行榜,zreverange 倒叙 zrange正序
127.0.0.1:6379> ZREVRANGE mid_test 0 -1 withscores 1) "yuyu" 2) "99" 3) "wusir" 4) "80" 5) "xiaofneg" 6) "75" 7) "alex" 8) "70" 127.0.0.1:6379> ZRANGE mid_test 0 -1 withscores 1) "alex" 2) "70" 3) "xiaofneg" 4) "75" 5) "wusir" 6) "80" 7) "yuyu" 8) "99"
移除有序集合mid_test中的成员,xiaofeng给移除掉
127.0.0.1:6379> ZREM mid_test xiaofneg (integer) 1 127.0.0.1:6379> ZRANGE mid_test 0 -1 withscores 1) "alex" 2) "70" 3) "wusir" 4) "80" 5) "yuyu" 6) "99"
返回有序集合mid_test的基数
127.0.0.1:6379> ZCARD mid_test (integer) 3 返回成员的score值 127.0.0.1:6379> ZSCORE mid_test alex "70"
zrank返回有序集合中,成员的排名。默认按score,从小到大排序。
127.0.0.1:6379> ZRANGE mid_test 0 -1 withscores 1) "alex" 2) "70" 3) "wusir" 4) "80" 5) "yuyu" 6) "99" 127.0.0.1:6379> 127.0.0.1:6379> 127.0.0.1:6379> ZRANK mid_test wusir (integer) 1 127.0.0.1:6379> ZRANK mid_test yuyu (integer) 2
哈希结构就是 k1 -> k1 : v1 如同字典 套字典 { k1 : { k2: v2 } } ,取出v2 必须 k1,取出k2
hashes即哈希。哈希是从redis-2.0.0版本以后才有的数据结构。
hashes存的是字符串和字符串值之间的映射,好比一个用户要存储其全名、姓氏、年龄等等,就很适合使用哈希。
hexists 判断是否存在
redis hash是一个string类型的field和value的映射表 语法 hset key field value hset news:1 title "first news title" #设置第一条新闻 news的id为1,添加数据title的值是"first news title" hset news:1 content "news content" #添加一个conntent内容 hget news:1 title #获取news:1的标题 hget news:1 content #获取news的内容 hmget news:1 title content #获取多对news:1的 值 hmset news:2 title "second news title" content "second Contents2" #设置第二条新闻news:2 多个field hmget news:2 title content #获取news:2的多个值 hkeys news:1 #获取新闻news:1的全部key hvals news:1 #获取新闻news:1的全部值 hlen news:1 #获取新闻news:1的长度 hdel news:1 title #删除新闻news:1的title hlen news:1 #看下新闻news:1的长度 hexists news:1 title #判断新闻1中是否有title,不存在返回0,存在返回1
咱们在使用redis时候,最好更改默认端口,而且使用redis密码登陆。
(1)redis没有用户概念,redis只有密码
(2)redis默认在工做在保护模式下。不容许远程任何用户登陆的(protected-mode)
redis.conf设置
protected-mode yes #打开保护模式 port 6380 #更改默认启动端口 requirepass xxxxxx #设置redis启动密码,xxxx是自定义的密码
启动redis服务端
redis-server /opt/redis-4.0.10/redis.conf & #指定配置文件启动redis,且后台启动
使用密码登陆redis,使用6380端口
方法1,使用这个
[root@oldboy_python ~ 09:48:41]#redis-cli -p 6380 127.0.0.1:6380> auth xxxx OK
方法2,此方案不安全,容易暴露密码
[root@oldboy_python ~ 09:49:46]#redis-cli -p 6380 -a xxxx Warning: Using a password with '-a' option on the command line interface may not be safe. 127.0.0.1:6380> ping PONG
补充
检查redis是否设置了密码
127.0.0.1:6380> CONFIG get requirepass 1) "requirepass" 2) "xxxxxx"
若是没有,也能够给redis设置密码(命令方式)
CONFIG set requirepass "xxxxxx"