服务端的redis
持久化(Persistence)
redis的持久化指的是redis会把内存的中的数据写入到硬盘中,在redis重新启动的时候加载这些数据,从而最大限度的降低缓存丢失带来的影响。
哨兵(Sentinel)和复制(Replication)
Sentinel可以管理多个Redis服务器,它提供了监控,提醒以及自动的故障转移的功能;Replication则是负责让一个Redis服务器可以配备多个备份的服务器。Redis也是利用这两个功能来保证Redis的高可用的。此外,Sentinel功能则是对Redis的发布和订阅功能的一个利用。
集群(Cluster)
Redis Cluster的具体实现细节则是采用了Hash槽的概念,即预先分配出来16384个槽:在客户端通过对Key进行CRC16(key)% 16384运算得到对应的槽是哪一个;在redis服务端则是每个服务器负责一部分槽,当有新的服务器加入或者移除的时候,再来迁移这些槽以及其对应的数据,同时每个服务器都持有完整的槽和其对应的服务器的信息,这就使得服务器端可以进行对客户端的请求进行重定向处理。
客户端的redis
数据类型
事务
redis事务支持一次性按顺序执行多个命令的能力,并保证其原子性
Lua脚本
在事务的基础上,如果我们需要在服务端一次性的执行更复杂的操作(包含一些逻辑判断),则lua就可以排上用场了(比如在获取某一个缓存的时候,同时延长其过期时间)。redis保证lua脚本的原子性,一定的场景下,是可以代替redis提供的事务相关的命令的。相当于基于网络应用的架构风格中介绍到的远程求值(Remote Evluation = REV)的具体实现。
管道
因为redis的客户端和服务器的连接时基于TCP的, 默认每次连接都时只能执行一个命令。管道则是允许利用一次连接来处理多条命令,从而可以节省一些tcp连接的开销。管道和事务的差异在于管道是为了节省通信的开销,但是并不会保证原子性。
分布式锁
官方推荐采用Redlock算法,即使用string类型,加锁的时候给的一个具体的key,然后设置一个随机的值;取消锁的时候用使用lua脚本来先执行获取比较,然后再删除key。
yum -y install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make tcl
1、下载安装包,并移植到/usr/local/下
链接: https://pan.baidu.com/s/11XaG8kuy13QWyIdXFXz2Tg 密码: mojq
2、解压压缩包
[root@node01 local]# tar -zxvf redis-3.0.4.tar.gz
3、进入解压目录,输入make编译
[root@node01 redis-3.0.4]# pwd
/usr/local/redis-3.0.4
[root@node01 redis-3.0.4]# make
4、输入make install安装
[root@node01 redis-3.0.4]# make install
5、安装后的redis命令默认在/usr/local/bin目录
[root@node01 bin]# pwd
/usr/local/bin
[root@node01 bin]# ll
输入redis-server
[root@node01 bin]# redis-server
可以修改配置文件,使之可以后台允许
[root@node01 redis-3.0.4]# pwd
/usr/local/redis-3.0.4
[root@node01 redis-3.0.4]# vi redis.conf
搜索/daemon并修改配置
/daemon
daemonize yes
用修改之后的配置启动
[root@node01 redis-3.0.4]# redis-server redis.conf
查看进程
[root@node01 redis-3.0.4]# ps aux|grep redis
root 2603 0.1 0.3 141004 7456 ? Ssl 17:14 0:00 redis-server *:6379
root 2607 0.0 0.0 112828 972 pts/0 S+ 17:15 0:00 grep --color=auto redis
输入redis-cli
[root@node01 redis-3.0.4]# redis-cli
127.0.0.1:6379>
exit退出
127.0.0.1:6379> exit
[root@node01 redis-3.0.4]# redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set username root
OK
127.0.0.1:6379> get username
"root"
127.0.0.1:6379> keys *
1) "username"
127.0.0.1:6379>
输入redis-cli shutdown
[root@node01 redis-3.0.4]# redis-cli shutdown
查看进程
[root@node01 redis-3.0.4]# ps aux|grep redis
root 2631 0.0 0.0 112828 972 pts/0 S+ 17:19 0:00 grep --color=auto redis
启动服务端
[root@node01 redis-3.0.4]# redis-server redis.conf
测试get和set的性能
[root@node01 redis-3.0.4]# redis-benchmark -t get,set
====== SET ======
100000 requests completed in 0.44 seconds
50 parallel clients
3 bytes payload
keep alive: 1
100.00% <= 0 milliseconds
226757.36 requests per second
====== GET ======
100000 requests completed in 0.43 seconds
50 parallel clients
3 bytes payload
keep alive: 1
100.00% <= 0 milliseconds
234192.05 requests per second
[root@node01 redis-3.0.4]# redis-cli
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]>
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> EXISTS username
(integer) 1
127.0.0.1:6379> set k k
OK
127.0.0.1:6379> EXPIRE k 10
(integer) 1
10意思就是10秒
127.0.0.1:6379> ttl k
(integer) -2
127.0.0.1:6379> set k k
OK
127.0.0.1:6379> type k
string
127.0.0.1:6379> move k 2
(integer) 1
127.0.0.1:6379> EXISTS k
(integer) 0
127.0.0.1:6379> SELECT 2
OK
127.0.0.1:6379[2]> EXISTS k
(integer) 1
原文:https://www.cnblogs.com/ghh520/p/13226547.html