centos下redis命令

来源:互联网 发布:淘宝达人 自媒体 认证 编辑:程序博客网 时间:2024/06/07 14:05
0、安装环境(centos):
yum install gcc-c++
复制redis-3.0.7.tar.gz到root文件夹,解压:tar -zxvf redis-3.0.7.tar.gz
cd redis-3.0.7,然后make,最后make PREFIX=/usr/local/redis install
然后进入到/usr/local/redis即可。


1、后台启动redis服务:
./bin/redis-server ./redis.conf
2、查看redis是否启动成功:
ps -ef | grep -i redis
3、停止后台的redis服务:
./bin/redis-cli shutdown
(以上命令都在/usr/local/redis文件夹运行)
4、输入./bin/redis-cli,然后输入ping,如果输出pong说明连接正常,同时可以开始在redis命令行输入redis命令(用exit退出redis的命令行)
5、redis存、取、删除、查看所有key命令:
set name imooc
get name
del name
keys *
5、用jedis写完程序后还无法连接到服务器的redis,因为linux系统并没有把6379端口打开
所以要在linux服务器进行防火墙的设置:
vim /etc/sysconfig/iptables


(解决CentOS(6和7版本),/etc/sysconfig/下没有iptables的问题:
       二、Centos 7版本解决办法:


       1、停止并屏蔽firewalld服务
       systemctl stop firewalld
       systemctl mask firewalld
       2、安装iptables-services软件包
       yum install iptables-services
       3、在引导时启用iptables服务
       systemctl enable iptables
       4、启动iptables服务
       systemctl start iptables
       5、保存防火墙规则
       service iptables save
       或
       /usr/libexec/iptables/iptables.init save
       另外:管理iptables服务
       systemctl [stop|start|restart] iptables





(CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙步骤。
1、关闭firewall:
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)


2、iptables防火墙(这里iptables已经安装,下面进行配置)
vi/etc/sysconfig/iptables #编辑防火墙配置文件
# sampleconfiguration for iptables service
# you can edit thismanually or use system-config-firewall
# please do not askus to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT[0:0]
:OUTPUT ACCEPT[0:0]
-A INPUT -m state--state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -jACCEPT
-A INPUT -i lo -jACCEPT
-A INPUT -p tcp -mstate --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -jACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080-j ACCEPT
-A INPUT -j REJECT--reject-with icmp-host-prohibited
-A FORWARD -jREJECT --reject-with icmp-host-prohibited
COMMIT
:wq! #保存退出


备注:这里使用80和8080端口为例。***部分一般添加到“-A INPUT -p tcp -m state --state NEW -m tcp--dport 22 -j ACCEPT”行的上面或者下面,切记不要添加到最后一行,否则防火墙重启后不生效。
systemctlrestart iptables.service #最后重启防火墙使配置生效
systemctlenable iptables.service #设置防火墙开机启动





修改完iptables后重启防火墙:
service iptables restart

Centos7的做法:
systemctl restart iptables.service #重启防火墙使配置生效


systemctl enable iptables.service #设置防火墙开机启动


最后重启系统使设置生效即可。



(查看防火墙的状态:systemctl status firewalld)



原来是redis默认只能localhost登录,所以需要开启远程登录。解决方法如下:  
  
  在redis的配置文件redis.conf中,找到bind localhost注释掉。  
  
    注释掉本机,局域网内的所有计算机都能访问。  
  
    band localhost   只能本机访问,局域网内计算机不能访问。  
  
    bind  局域网IP    只能局域网内IP的机器访问, 本地localhost都无法访问。  


上面是从别的地方找到的内容,虽然不是很具体,但是指明了方向,那就是redis.conf,所以
[java] view plain copy
################################## NETWORK #####################################  
  
# By default, if no "bind" configuration directive is specified, Redis listens  
# for connections from all the network interfaces available on the server.  
# It is possible to listen to just one or multiple selected interfaces using  
# the "bind" configuration directive, followed by one or more IP addresses.  
#  
# Examples:  
#  
# bind 192.168.1.100 10.0.0.1  
# bind 127.0.0.1 ::1  
#  
# ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the  
# internet, binding to all the interfaces is dangerous and will expose the  
# instance to everybody on the internet. So by default we uncomment the  
# following bind directive, that will force Redis to listen only into  
# the IPv4 lookback interface address (this means Redis will be able to  
# accept connections only from clients running into the same computer it  
# is running).  
#  
# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES  
# JUST COMMENT THE FOLLOWING LINE.  
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
bind 127.0.0.1  
bind 192.168.1.118  
  
# Protected mode is a layer of security protection, in order to avoid that  
# Redis instances left open on the internet are accessed and exploited.  
#  
# When protected mode is on and if:  
#  


上面是redis.conf中的内容
[java] view plain copy
bind 192.168.1.118  
是我后来添加的,也就是加了这句话之后,才可以正常的访问了。
[java] view plain copy
public static void main(String[] args) {  
        Jedis jedis = new Jedis("192.168.1.118", 6379);  
        System.out.println(jedis);  
        String ping = jedis.ping();  
        System.out.println(ping);  
    }  


[java] view plain copy
redis.clients.jedis.Jedis@6ff3c5b5  
PONG







二、(以下操作均在redis-cli下)
1、字符串
set company imooc
get company
getset company baidu(先输出"imooc",再改变值为"baidu")
del company
incr num(num自增1,若没有,则初始化为0然后马上自增为1)
decr num
incrby num 5(num+5)
decrby num 3
append num 5(在3后面追加5这个字符串)


2、键值对的哈希类型
hset myhash username jack
hset myhash age 18
hmset myhash2 username rose age 21


hget myhash username
"jack"


hmget myhash2 username age
1)"jack"
2)"18"


hgetall myhash
1)"username"
2)"jack"
3)"age"
4)"18"


hdel myhash2 username age


del myhash2 (删除整个哈希)


hincrby myhash age 5 (增加数字)


hexists myhash username (判断是否存在)


hlen myhash (得到哈希中属性的个数)


hkeys myhash (得到哈希中属性的名称)


hvals myhash (得到哈希中所有的值)


3、list(按照插入顺序排序的字符串的链表,如果从链表的两侧插入删除数据会很高效)
lpush mylist a b c (从链表左侧插入list)
rpush mylist2 a b c


lrange mylist 0 5 (从链表左侧开始查看链表,0代表第一个,-1代表最后一个)


lpop mylist (弹出左侧第一个元素)
rpop mylist2


llen mylist


lpushx mylist x (仅当mylist存在时插入)


lrem mylist 2 3   (count value)(如果count为正数,从左到右遍历删除count个值为value的数,负数则从右到左遍历,0则删除所有值为value的数)


lset mylist 3 mmm (index value)


linsert mylist4 before b 11 (在b之前插入11)
linsert mylist4 after b 22


rpoplpush mylist5 mylist6 (弹出mylist5右边的值到mylist6的左边)


4、Set(没有排序的字符集合,且不允许出现重复的元素)
sadd myset a b c
srem myset a b
smembers myset (返回成员)
sismember myset a (判断是否为成员)
scard myset (返回成员数量)
srandmember myset (随机返回成员)


sdiff mya1 myb1 (差集运算)
sinter mya2 myb2 (交集运算)
sunion mya3 myb3 (并集运算)


sdiffstore my1 mya1 myb1 (差集存储在my1)
sinterstore my2 mya2 myb2
sunionstore my3 mya3 myb3


5、sorted-set(按分数从小到大排序)
zadd mysort 70 zs 80 ls 90 ww (分数  元素)
zadd mysort 100 zs(覆盖原有的分数)


zscore mysort zs
"100"


zcard mysort (返回数量)


zrem mysort ww ls


zrange mysort 0 -1
zrange mysort 0 -1 withscores
zrevrange mysort 0 -1 withscores (按分数从大到小排序)


zremrangebyrank mysort 0 4 (按照排名范围删除)
zremrangebyscore mysort 80 100 (按照分数范围删除)


zrangebyscore mysort 0 100
zrangebyscore mysort 0 100 withscores limit 0 2 (只显示前两个)


zincrby mysort 3 ls (ls的分数+3)


zcount mysort 80 90


三、keys的通用操作
keys *
keys my? (以my开头的keys)
del my1 my2 my3
exists my1 (判断是否存在)
get company (获取key的值)
rename company newcompany (重命名)
expire newcompany 1000 (设置1000秒的过期时间)
ttl newcompany (查看所剩时间)
type newcompany (返回key的类型)


四、Redis的特性
一个Redis实例最多可以有16个数据库(0到15,默认使用0)
指定使用哪个数据库:
select 1


move myset 1(移动到1号数据库)


与事务有关的命令:multi exec discard(第一个命令相当于开启事务,第二个相当于commit,第三个相当于回滚)


五、Redis持久化
两种方式:
RDB(指定时间间隔内,将内存的数据集快照写入到磁盘)
AOF(以日志记录服务器的每次操作,每次Redis启动会读取该文件,来重新构建数据库)
可以两种同时使用,
也可以无持久化(则用来作为缓存机制)


1、RDB
优势:整个数据库只需要一个文件,易备份从而发生故障便于恢复(一个单独文件可以压缩后转移到另一个存储器上);
性能最大化,只需要分岔出几个子进程由它们完成持久化(避免服务器进程持久io的操作),如果数据集很大,则这种方式的启动效率更高


劣势:高可用性不足(即会发生数据丢失),如果持久化前发生宕机;由于需要子进程,若数据集特别大,服务器可能会停止几毫秒甚至一秒


配置:在redis.conf
看到
save 900 1 (每15分钟至少有1个key发生变化,就会持久化一次)
save 300 10 (每5分钟至少有10个key发生变化,就会持久化一次)
save 60 10000 (每1分钟至少有10000个key发生变化,就会持久化一次)
#
#
#
dbfilename dump.rdb (数据的文件名)
#
#
dir ./ (数据文件的路径,在当前文件夹)


2、AOF
优势:数据安全性;Redis三种同步策略:每秒同步(异步,宕机时会丢失数据,RDB使用)、每修改同步(同步,修改时立即同步防丢失,效率最低最安全,AOF使用)、不同步;
对日志写入采取append追加方式,即使宕机不会破坏日志已存在内容,如果只写入了一半可能发生数据不完整问题,但Redis启动时可以采用redis -check -aof工具
来解决数据一致性问题;如果日志过大,可启动重写机制,保护数据安全性;日志格式清晰易于理解,记录了每次修改操作,也可用于日后的数据重建。


劣势:同等数据集大小,文件要更大一些;根据同步策略的不同,往往运行效率更低一些(每修改同步)。


配置:redis.conf
appendonly no (说明默认不使用aof,使用则要修改为yes,则会产生appendonly.aof文件)
#
#
# (三种同步策略)
#appendfsync always (每修改同步,若使用aof则去掉前面的注释符,给下面的每秒同步添加注释符)
appendfsync everysec (每秒同步)
# appendfsync no (不同步)


使用AOF的例子:
flushall (清空所有数据库)
然后vim appendonly.aof
删掉该日志文件里最后一行flushall,然后保存,再重启一下Redis

再keys *,则所有数据库都还原了。






遇到的问题:

1、

yum报错Loaded plugins: fastestmirror

http://blog.csdn.net/zvall/article/details/52180699


2、

Error: failure: repodata/repomd.xml from fedora: [Errno 256] No more mirrors to try.

http://blog.csdn.net/orangleliu/article/details/40588799
http://blog.csdn.net/Lazybones_3/article/details/78665140
http://blog.csdn.net/anigon/article/details/54018733

3、CentOS 6.5开放端口方法
http://blog.csdn.net/lipp555/article/details/53585431

4、查看centos版本

http://www.linuxidc.com/Linux/2014-12/110748.htm


5、安装和配置nginx

https://www.cnblogs.com/Robert-huge/p/6003934.html(执行完第一步后如果执行第二步的时候有报错:

Error: failure: repodata/repomd.xml from nginx: [Errno 256] No more mirrors to try.

,则把/etc/yum.repos.d/nginx.repo改为nginx.repo.backup)

http://www.jb51.net/article/97601.htm


6、

执行 systemctl start firewalld 命令后出现Failed to start firewalld.service: Unit is masked

http://blog.csdn.net/chen_yi_ping/article/details/76690704

7、假如连接redis6379端口一直失败,即使设置了redis.conf并开启了redis-server还是失败,注释掉redis.conf里的bind

原创粉丝点击