一:Redis是一个开源的key-value存储系统。与Memcached相似,Redis将大部分数据存储在内存中,支持的数据类型包括:字符串、哈希表、链表、集合、有序集合以及基于这些数据类型的相关操做。Redis使用C语言开发,在大多数像Linux、BSD和Solaris等POSIX系统上无需任何外部依赖就可使用。Redis支持的客户端语言也很是丰富,经常使用的计算机语言如C、C#、C++、Object-C、PHP、Python、 Java、Perl、Lua、Erlang等均有可用的客户端来访问Redis服务器。当前Redis的应用已经很是普遍,国内像新浪、淘宝,国外像 Flickr、Github等均在使用Redis的缓存服务。 Redis的安装很是方便,只需从http://redis.io/download获取源码,而后make && make install便可。默认状况下,Redis的服务器启动程序和客户端程序会安装到/usr/local/bin目录下。在启动Redis服务器时,咱们须要为其指定一个配置文件,缺省状况下配置文件在Redis的源码目录下,文件名为redis.conf。node
1.1:二进制安装redis:git
# cd /usr/local/src/ wget http://download.redis.io/releases/redis-3.2.9.tar.gz tar -zxvf redis-3.2.9.tar.gz cd redis-3.2.9 ln -sv /usr/local/src/redis-3.2.9 /usr/local/redis make # cp utils/redis_init_script /etc/init.d/redis #启动脚本 # chmod a+x /etc/init.d/redis
1.2:启动脚本默认的配置内容:redis
#!/bin/sh # # Simple Redis init.d script conceived to work on Linux systems # as it does use of the /proc filesystem. REDISPORT=6379 EXEC=/usr/local/redis/src/redis-server CLIEXEC=/usr/local/redis/src/redis-cli PIDFILE=/var/run/redis_${REDISPORT}.pid CONF="/etc/redis/${REDISPORT}.conf" case "$1" in start) if [ -f $PIDFILE ] then echo "$PIDFILE exists, process is already running or crashed" else echo "Starting Redis server..." $EXEC $CONF fi ;; stop) if [ ! -f $PIDFILE ] then echo "$PIDFILE does not exist, process is not running" else PID=$(cat $PIDFILE) echo "Stopping ..." $CLIEXEC -p $REDISPORT shutdown while [ -x /proc/${PID} ] do echo "Waiting for Redis to shutdown ..." sleep 1 done echo "Redis stopped" fi ;; *) echo "Please use start or stop as first argument" ;; esac
添加环境变量:算法
# vim /etc/profile export REDIS_HOME=/usr/local/redis export PATH=$REDIS_HOME/src:$PATH
1.3:准备配置文件:数据库
# mkdir /etc/redis # cp redis.conf /etc/redis/6379.conf
1.4:启动redis服务:vim
# /etc/init.d/redis start Starting Redis server... 9164:M 10 Jul 17:54:47.959 * Increased maximum number of open files to 10032 (it was originally set to 1024). _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 3.2.9 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in standalone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 9164 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' 9164:M 10 Jul 17:54:47.962 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 9164:M 10 Jul 17:54:47.962 # Server started, Redis version 3.2.9 9164:M 10 Jul 17:54:47.962 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. 9164:M 10 Jul 17:54:47.962 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled. 9164:M 10 Jul 17:54:47.963 * The server is now ready to accept connections on port 6379
1.4:配置文件信息:
#daemonize no 默认状况下, redis 不是在后台运行的,若是须要在后台运行,把该项的值更改成 yes
daemonize yes
# 当 redis 在后台运行的时候, Redis 默认会把 pid 文件放在 /var/run/redis.pid ,你能够配置到其余地址。
# 当运行多个 redis 服务时,须要指定不一样的 pid 文件和端口
pidfile /var/run/redis_6379.pid
# 指定 redis 运行的端口,默认是 6379
port 6379
# 在高并发的环境中,为避免慢客户端的链接问题,须要设置一个高速后台日志
tcp-backlog 511
# 指定 redis 只接收来自于该 IP 地址的请求,若是不进行设置,那么将处理全部请求
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1
# 设置客户端链接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该链接
# 0 是关闭此设置
timeout 0
# TCP keepalive
# 在 Linux 上,指定值(秒)用于发送 ACKs 的时间。注意关闭链接须要双倍的时间。默认为 0 。
tcp-keepalive 0
# 指定日志记录级别,生产环境推荐 notice
# Redis 总共支持四个级别: debug 、 verbose 、 notice 、 warning ,默认为 verbose
# debug 记录不少信息,用于开发和测试
# varbose 有用的信息,不像 debug 会记录那么多
# notice 普通的 verbose ,经常使用于生产环境
# warning 只有很是重要或者严重的信息会记录到日志
loglevel notice
# 配置 log 文件地址
# 默认值为 stdout ,标准输出,若后台模式会输出到 /dev/null 。
logfile /var/log/redis/redis.log
# 可用数据库数
# 默认值为 16 ,默认数据库为 0 ,数据库范围在 0- ( database-1 )之间
databases 16
################################ 快照#################################
# 保存数据到磁盘,格式以下 :
# save
# 指出在多长时间内,有多少次更新操做,就将数据同步到数据文件 rdb 。
# 至关于条件触发抓取快照,这个能够多个条件配合
# 好比默认配置文件中的设置,就设置了三个条件
# save 900 1 900 秒内至少有 1 个 key 被改变
# save 300 10 300 秒内至少有 300 个 key 被改变
# save 60 10000 60 秒内至少有 10000 个 key 被改变
# save 900 1
# save 300 10
# save 60 10000
# 后台存储错误中止写。
stop-writes-on-bgsave-error yes
# 存储至本地数据库时(持久化到 rdb 文件)是否压缩数据,默认为 yes
rdbcompression yes
# RDB 文件的是否直接偶像 chcksum
rdbchecksum yes
# 本地持久化数据库文件名,默认值为 dump.rdb
dbfilename dump.rdb
# 工做目录
# 数据库镜像备份的文件放置的路径。
# 这里的路径跟文件名要分开配置是由于 redis 在进行备份时,先会将当前数据库的状态写入到一个临时文件中,等备份完成,
# 再把该该临时文件替换为上面所指定的文件,而这里的临时文件和上面所配置的备份文件都会放在这个指定的路径当中。
# AOF 文件也会存放在这个目录下面
# 注意这里必须制定一个目录而不是文件
dir /var/lib/redis-server/
################################# 复制 #################################
# 主从复制 . 设置该数据库为其余数据库的从数据库 .
# 设置当本机为 slav 服务时,设置 master 服务的 IP 地址及端口,在 Redis 启动时,它会自动从 master 进行数据同步
# slaveof
# 当 master 服务设置了密码保护时 ( 用 requirepass 制定的密码 )
# slave 服务链接 master 的密码
# masterauth
# 当从库同主机失去链接或者复制正在进行,从机库有两种运行方式:
# 1) 若是 slave-serve-stale-data 设置为 yes( 默认设置 ) ,从库会继续响应客户端的请求
# 2) 若是 slave-serve-stale-data 是指为 no ,出去 INFO 和 SLAVOF 命令以外的任何请求都会返回一个
# 错误 "SYNC with master in progress"
slave-serve-stale-data yes
# 配置 slave 实例是否接受写。写 slave 对存储短暂数据(在同 master 数据同步后能够很容易地被删除)是有用的,但未配置的状况下,客户端写可能会发送问题。
# 从 Redis2.6 后,默认 slave 为 read-only
slaveread-only yes
# 从库会按照一个时间间隔向主库发送 PINGs. 能够经过 repl-ping-slave-period 设置这个时间间隔,默认是 10 秒
# repl-ping-slave-period 10
# repl-timeout 设置主库批量数据传输时间或者 ping 回复时间间隔,默认值是 60 秒
# 必定要确保 repl-timeout 大于 repl-ping-slave-period
# repl-timeout 60
# 在 slave socket 的 SYNC 后禁用 TCP_NODELAY
# 若是选择“ yes ” ,Redis 将使用一个较小的数字 TCP 数据包和更少的带宽将数据发送到 slave , 可是这可能致使数据发送到 slave 端会有延迟 , 若是是 Linux kernel 的默认配置,会达到 40 毫秒 .
# 若是选择 "no" ,则发送数据到 slave 端的延迟会下降,但将使用更多的带宽用于复制 .
repl-disable-tcp-nodelay no
# 设置复制的后台日志大小。
# 复制的后台日志越大, slave 断开链接及后来可能执行部分复制花的时间就越长。
# 后台日志在至少有一个 slave 链接时,仅仅分配一次。
# repl-backlog-size 1mb
# 在 master 再也不链接 slave 后,后台日志将被释放。下面的配置定义从最后一个 slave 断开链接后须要释放的时间(秒)。
# 0 意味着从不释放后台日志
# repl-backlog-ttl 3600
# 若是 master 不能再正常工做,那么会在多个 slave 中,选择优先值最小的一个 slave 提高为 master ,优先值为 0 表示不能提高为 master 。
slave-priority 100
# 若是少于 N 个 slave 链接,且延迟时间 <=M 秒,则 master 可配置中止接受写操做。
# 例如须要至少 3 个 slave 链接,且延迟 <=10 秒的配置:
# min-slaves-to-write 3
# min-slaves-max-lag 10
# 设置 0 为禁用
# 默认 min-slaves-to-write 为 0 (禁用), min-slaves-max-lag 为 10
################################## 安全 ###################################
# 设置客户端链接后进行任何其余指定前须要使用的密码。
# 警告:由于 redis 速度至关快,因此在一台比较好的服务器下,一个外部的用户能够在一秒钟进行 150K 次的密码尝试,这意味着你须要指定很是很是强大的密码来防止暴力破解
# requirepass foobared
# 命令重命名 .
# 在一个共享环境下能够重命名相对危险的命令。好比把 CONFIG 重名为一个不容易猜想的字符。
# 举例 :
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
# 若是想删除一个命令,直接把它重命名为一个空字符 "" 便可,以下:
# rename-command CONFIG ""
################################### 约束###################################
#设置同一时间最大客户端链接数,默认无限制,
#Redis 能够同时打开的客户端链接数为 Redis 进程能够打开的最大文件描述符数,
#若是设置 maxclients 0 ,表示不做限制。
#当客户端链接数到达限制时, Redis 会关闭新的链接并向客户端返回 max number of clients reached 错误信息
# maxclients 10000
# 指定 Redis 最大内存限制, Redis 在启动时会把数据加载到内存中,达到最大内存后, Redis 会按照清除策略尝试清除已到期的 Key
# 若是 Redis 依照策略清除后没法提供足够空间,或者策略设置为 ”noeviction” ,则使用更多空间的命令将会报错,例如 SET, LPUSH 等。但仍然能够进行读取操做
# 注意: Redis 新的 vm 机制,会把 Key 存放内存, Value 会存放在 swap 区
# 该选项对 LRU 策略颇有用。
# maxmemory 的设置比较适合于把 redis 看成于相似 memcached 的缓存来使用,而不适合当作一个真实的 DB 。
# 当把 Redis 当作一个真实的数据库使用的时候,内存使用将是一个很大的开销
# maxmemory
# 当内存达到最大值的时候 Redis 会选择删除哪些数据?有五种方式可供选择
# volatile-lru -> 利用 LRU 算法移除设置过过时时间的 key (LRU: 最近使用 Least RecentlyUsed )
# allkeys-lru -> 利用 LRU 算法移除任何 key
# volatile-random -> 移除设置过过时时间的随机 key
# allkeys->random -> remove a randomkey, any key
# volatile-ttl -> 移除即将过时的 key(minor TTL)
# noeviction -> 不移除任何能够,只是返回一个写错误
# 注意:对于上面的策略,若是没有合适的 key 能够移除,当写的时候 Redis 会返回一个错误
# 默认是 : volatile-lru
# maxmemory-policy volatile-lru
# LRU 和 minimal TTL 算法都不是精准的算法,可是相对精确的算法 ( 为了节省内存 ) ,随意你能够选择样本大小进行检测。
# Redis 默认的灰选择 3 个样本进行检测,你能够经过 maxmemory-samples 进行设置
# maxmemory-samples 3
############################## AOF###############################
# 默认状况下, redis 会在后台异步的把数据库镜像备份到磁盘,可是该备份是很是耗时的,并且备份也不能很频繁,若是发生诸如拉闸限电、拔插头等情况,那么将形成比较大范围的数据丢失。
# 因此 redis 提供了另一种更加高效的数据库备份及灾难恢复方式。
# 开启 append only 模式以后, redis 会把所接收到的每一次写操做请求都追加到 appendonly.aof 文件中,当 redis 从新启动时,会从该文件恢复出以前的状态。
# 可是这样会形成 appendonly.aof 文件过大,因此 redis 还支持了 BGREWRITEAOF 指令,对 appendonly.aof 进行从新整理。
# 你能够同时开启 asynchronous dumps 和 AOF
appendonly no
# AOF 文件名称 ( 默认 : "appendonly.aof")
# appendfilename appendonly.aof
# Redis 支持三种同步 AOF 文件的策略 :
# no: 不进行同步,系统去操做 . Faster.
# always: always 表示每次有写操做都进行同步 . Slow, Safest.
# everysec: 表示对写操做进行累积,每秒同步一次 . Compromise.
# 默认是 "everysec" ,按照速度和安全折中这是最好的。
# 若是想让 Redis 能更高效的运行,你也能够设置为 "no" ,让操做系统决定何时去执行
# 或者相反想让数据更安全你也能够设置为 "always"
# 若是不肯定就用 "everysec".
# appendfsync always
appendfsync everysec
# appendfsync no
# AOF 策略设置为 always 或者 everysec 时,后台处理进程 ( 后台保存或者 AOF 日志重写 ) 会执行大量的 I/O 操做
# 在某些 Linux 配置中会阻止过长的 fsync() 请求。注意如今没有任何修复,即便 fsync 在另一个线程进行处理
# 为了减缓这个问题,能够设置下面这个参数 no-appendfsync-on-rewrite
no-appendfsync-on-rewrite no
# AOF 自动重写
# 当 AOF 文件增加到必定大小的时候 Redis 可以调用 BGREWRITEAOF 对日志文件进行重写
# 它是这样工做的: Redis 会记住上次进行些日志后文件的大小 ( 若是从开机以来还没进行太重写,那日子大小在开机的时候肯定 )
# 基础大小会同如今的大小进行比较。若是如今的大小比基础大小大制定的百分比,重写功能将启动
# 同时须要指定一个最小大小用于 AOF 重写,这个用于阻止即便文件很小可是增加幅度很大也去重写 AOF 文件的状况
# 设置 percentage 为 0 就关闭这个特性
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
################################ LUASCRIPTING #############################
# 一个 Lua 脚本最长的执行时间为 5000 毫秒( 5 秒),若是为 0 或负数表示无限执行时间。
lua-time-limit 5000
################################LOW LOG################################
# Redis Slow Log 记录超过特定执行时间的命令。执行时间不包括 I/O 计算好比链接客户端,返回结果等,只是命令执行时间
# 能够经过个参数设置 slow log :一个是告诉 Redis 执行超过多少时间被记录的参数 slowlog-log-slower-than( 微妙 ) ,
# 另外一个是 slow log 的长度。当一个新命令被记录的时候最先的命令将被从队列中移除
# 下面的时间以微妙为单位,所以 1000000 表明一秒。
# 注意指定一个负数将关闭慢日志,而设置为 0 将强制每一个命令都会记录
slowlog-log-slower-than 10000
# 对日志长度没有限制,只是要注意它会消耗内存
# 能够经过 SLOWLOG RESET 回收被慢日志消耗的内存
# 推荐使用默认值 128 ,当慢日志超过 128 时,最早进入队列的记录会被踢出
slowlog-max-len 128
################################ 事件通知 #############################
# 当事件发生时, Redis 能够通知 Pub/Sub 客户端。
# 能够在下表中选择 Redis 要通知的事件类型。事件类型由单个字符来标识:
# K Keyspace 事件,以 _keyspace@_ 的前缀方式发布
# E Keyevent 事件,以 _keysevent@_ 的前缀方式发布
# g 通用事件(不指定类型),像 DEL, EXPIRE, RENAME, …
# $ String 命令
# s Set 命令
# h Hash 命令
# z 有序集合命令
# x 过时事件(每次 key 过时时生成)
# e 清除事件(当 key 在内存被清除时生成)
# A g$lshzxe 的别称,所以 ”AKE” 意味着全部的事件
# notify-keyspace-events 带一个由 0 到多个字符组成的字符串参数。空字符串意思是通知被禁用。
# 例子:启用 list 和通用事件:
# notify-keyspace-events Elg
# 默认所用的通知被禁用,由于用户一般不须要改特性,而且该特性会有性能损耗。
# 注意若是你不指定至少 K 或 E 之一,不会发送任何事件。
notify-keyspace-events “”
############################## 高级配置 ###############################
# 当 hash 中包含超过指定元素个数而且最大的元素没有超过临界时,
# hash 将以一种特殊的编码方式(大大减小内存使用)来存储,这里能够设置这两个临界值
# Redis Hash 对应 Value 内部实际就是一个 HashMap ,实际这里会有 2 种不一样实现,
# 这个 Hash 的成员比较少时 Redis 为了节省内存会采用相似一维数组的方式来紧凑存储,而不会采用真正的 HashMap 结构,对应的 valueredisObject 的 encoding 为 zipmap,
# 当成员数量增大时会自动转成真正的 HashMap, 此时 encoding 为 ht 。
hash-max-zipmap-entries 512
hash-max-zipmap-value 64
# 和 Hash 同样,多个小的 list 以特定的方式编码来节省空间。
# list 数据类型节点值大小小于多少字节会采用紧凑存储格式。
list-max-ziplist-entries 512
list-max-ziplist-value 64
# set 数据类型内部数据若是所有是数值型,且包含多少节点如下会采用紧凑格式存储。
set-max-intset-entries 512
# 和 hashe 和 list 同样 , 排序的 set 在指定的长度内以指定编码方式存储以节省空间
# zsort 数据类型节点值大小小于多少字节会采用紧凑存储格式。
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
# Redis 将在每 100 毫秒时使用 1 毫秒的 CPU 时间来对 redis 的 hash 表进行从新 hash ,能够下降内存的使用
# 当你的使用场景中,有很是严格的实时性须要,不可以接受 Redis 时不时的对请求有 2 毫秒的延迟的话,把这项配置为 no 。
# 若是没有这么严格的实时性要求,能够设置为 yes ,以便可以尽量快的释放内存
activerehashing yes
# 客户端的输出缓冲区的限制,由于某种缘由客户端从服务器读取数据的速度不够快,
# 可用于强制断开链接(一个常见的缘由是一个发布 / 订阅客户端消费消息的速度没法遇上生产它们的速度)。
# 能够三种不一样客户端的方式进行设置:
# normal -> 正常客户端
# slave -> slave 和 MONITOR 客户端
# pubsub -> 至少订阅了一个 pubsub channel 或 pattern 的客户端
# 每一个 client-output-buffer-limit 语法 :
# client-output-buffer-limit
# 一旦达到硬限制客户端会当即断开,或者达到软限制并保持达成的指定秒数(连续)。
# 例如,若是硬限制为 32 兆字节和软限制为 16 兆字节 /10 秒,客户端将会当即断开
# 若是输出缓冲区的大小达到 32 兆字节,客户端达到 16 兆字节和连续超过了限制 10 秒,也将断开链接。
# 默认 normal 客户端不作限制,由于他们在一个请求后未要求时(以推的方式)不接收数据,
# 只有异步客户端可能会出现请求数据的速度比它能够读取的速度快的场景。
# 把硬限制和软限制都设置为 0 来禁用该特性
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb60
client-output-buffer-limit pubsub 32mb 8mb60
# Redis 调用内部函数来执行许多后台任务,如关闭客户端超时的链接,清除过时的 Key ,等等。
# 不是全部的任务都以相同的频率执行,但 Redis 依照指定的“ Hz ”值来执行检查任务。
# 默认状况下,“ Hz ”的被设定为 10 。
# 提升该值将在 Redis 空闲时使用更多的 CPU 时,但同时当有多个 key 同时到期会使 Redis 的反应更灵敏,以及超时能够更精确地处理。
# 范围是 1 到 500 之间,可是值超过 100 一般不是一个好主意。
# 大多数用户应该使用 10 这个预设值,只有在很是低的延迟的状况下有必要提升最大到 100 。
hz 10
# 当一个子节点重写 AOF 文件时,若是启用下面的选项,则文件每生成 32M 数据进行同步。
aof-rewrite-incremental-fsync yes
二:redis数据类型的基本操做:
2.1:字符串:
2.1.1:设置和获取key的值:
# redis-cli -h 127.0.0.1
127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> set key2 value2
OK
127.0.0.1:6379> get key1 #不能一次获取多个key的值
"value1"api
2.1.2:显示全部的key:
127.0.0.1:6379> KEYS *
1) "key2"
2) "key1"数组
2.1.3:判断key是否存在:
127.0.0.1:6379> EXISTS key1
(integer) 1 # 1表示存在
127.0.0.1:6379> EXISTS key10
(integer) 0 # 0表示不存在promise
2.1.4:删除指定的key:
127.0.0.1:6379> del key1 key3
(integer) 2 #1为删除了几个key的数量,没有的key删除不报错缓存
2.1.5:获取key的类型:
127.0.0.1:6379> LPUSH l1 "1,2,3" (integer) 1 127.0.0.1:6379> KEYS l1 1) "l1" 127.0.0.1:6379> type l1 list 127.0.0.1:6379> type key2 string
2.1.6:INCR:若是key不存在就建立并设置value默认为1并递增,DECR为递减
127.0.0.1:6379> INCR num (integer) 1 127.0.0.1:6379> INCR num (integer) 2 127.0.0.1:6379> INCR num (integer) 3 127.0.0.1:6379> INCR num (integer) 4 127.0.0.1:6379> INCR num (integer) 5 127.0.0.1:6379> DECR num (integer) 4 127.0.0.1:6379> DECR num (integer) 3 127.0.0.1:6379> DECR num (integer) 2 127.0.0.1:6379> DECR num (integer) 1 127.0.0.1:6379> DECR num (integer) 0 127.0.0.1:6379> DECR num (integer) -1
2.1.7:INCRBY递增和DECRBY递减:
127.0.0.1:6379> get num "4" 127.0.0.1:6379> DECRBY num 10 (integer) -6 127.0.0.1:6379> DECRBY num 10 (integer) -16 127.0.0.1:6379> get num "-16" 127.0.0.1:6379> INCRBY num 5 (integer) -11 127.0.0.1:6379> INCRBY num 5 (integer) -6
2.1.8:设置浮点数INCRBYFLOAT :
127.0.0.1:6379> INCRBYFLOAT num1 3.1415926 "3.1415926" 127.0.0.1:6379> INCRBYFLOAT num2 -0.45 "-0.45" 127.0.0.1:6379> get num1 "3.1415926" 127.0.0.1:6379> get num2 "-0.45"
2.1.9:MSET批量建立和MGET批量获取key:
127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3 OK 127.0.0.1:6379> MGET k1 k2 k3 1) "v1" 2) "v2" 3) "v3"
2.1.10:获取key字符串的长度:
127.0.0.1:6379> set a 12345 OK 127.0.0.1:6379> STRLEN a (integer) 5
2.2:HASH哈希表(散列数据类型):
2.2.1:HSET:命令用于为哈希表中的字段赋值,若是哈希表不存在,一个新的哈希表被建立并进行 HSET 操做,若是字段已经存在于哈希表中,旧值将被覆盖
2.2.2:HGET:获取key:
127.0.0.1:6379> HSET phone name iphone (integer) 1 127.0.0.1:6379> HSET phone color white (integer) 1 127.0.0.1:6379> HSET phone price 5000 (integer) 1 127.0.0.1:6379> HGET phone name "iphone" 127.0.0.1:6379> HGET phone color "white" 127.0.0.1:6379> HGET phone price "5000" 2.2.3:HGETALL:获取key的全部值 127.0.0.1:6379> HGETALL phone 1) "name" 2) "iphone" 3) "color" 4) "white" 5) "price" 6) "5000"
2.2.4:HMSET、HMGET、HMGETALL:批量建立、批量获取并获取全部的key:
127.0.0.1:6379> HMSET phone name huawei_honor8 color black storage 64G # 批量设置key
OK
127.0.0.1:6379> HMGET phone name storage # 批量获取key
1) "huawei_honor8"
2) "64G"
127.0.0.1:6379> HGETALL phone # 获取全部的key
1) "name"
2) "huawei_honor8"
3) "color"
4) "black"
5) "price"
6) "5000"
7) "storage"
8) "64G"
2.2.5:删除指定的key:
127.0.0.1:6379> HGETALL phone #查看当前全部的key和值
1) "name"
2) "huawei_honor8"
3) "color"
4) "black"
5) "price"
6) "5000"
7) "storage"
8) "64G"
127.0.0.1:6379> HDEL phone storage # 删除指定的key
(integer) 1
127.0.0.1:6379> HGETALL phone # 再次查看当前全部的key
1) "name"
2) "huawei_honor8"
3) "color"
4) "black"
5) "price"
6) "5000"
2.3: 列表:不一样的数据类型的命令是不通用的,如list与string的命令是不能通用的,除了set命令以外
2.3.1:从列表头部添加数据LPUSH和从列表尾部添加数据RPUSH,列表不存在会建立:
127.0.0.1:6379> LPUSH list1 1
(integer) 1
127.0.0.1:6379> LPUSH list1 2
(integer) 2
127.0.0.1:6379> LPUSH list1 a
(integer) 3
127.0.0.1:6379> RPUSH list1 b
(integer) 4
2.3.2:获取列表的长度:
127.0.0.1:6379> LLEN list1
(integer) 4
2.3.3:LPOP 与 RPOP:从头部和尾部弹出列表中的值:
127.0.0.1:6379> LPUSH list2 1
(integer) 1
127.0.0.1:6379> LPUSH list2 2
(integer) 2
127.0.0.1:6379> LPUSH list2 3
(integer) 3
127.0.0.1:6379> LPUSH list2 4 v
(integer) 5
127.0.0.1:6379> LPOP list2
"v"
127.0.0.1:6379> RPOP list1
"1"
2.3.4:LINDEX,返回列表中下表为INDEX的元素值:
127.0.0.1:6379> LINDEX list2 1
"3"
127.0.0.1:6379> LINDEX list2 2
"2"
2.3.5:LRANGE,返回指定下表位置的元素,0为第一个,1为第二个,-1为最后一个。。。,即获取到列表中的全部数据了:
127.0.0.1:6379> LRANGE list2 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
2.4:(set)集合数据类型的操做:集合默认是无序的,列表是有序的,有序是只按照添加的循序保持位置,而不是数值的从小到大的排序:
2.4.1:SADD:建立并给集合赋值,会自动将值去重:
127.0.0.1:6379> SADD set1 s1 s2 s3 s4
(integer) 4
127.0.0.1:6379> SADD set2 s1 s2 s3 s4 s5
(integer) 5
127.0.0.1:6379> SADD set3 s1 s2 s3 s4 s5 s6
(integer) 6
127.0.0.1:6379> SADD set4 s1 s2 s3 s4 s5 s6 s3 # 若是有重复的值就会只保留一个
(integer) 6
2.4.2:获取一个集合中的全部的值:
127.0.0.1:6379> SMEMBERS set2
1) "s4"
2) "s3"
3) "s2"
4) "s1"
5) "s5"
127.0.0.1:6379> SMEMBERS set1
1) "s4"
2) "s3"
3) "s2"
4) "s1"
2.4.3:SISMEMBER:判断一个值是否是在集合当中,在返回1,不然返回0
127.0.0.1:6379> SISMEMBER set1 s0
(integer) 0 # 不在集合中
127.0.0.1:6379> SISMEMBER set1 s3
(integer) 1 # 在集合中
2.4.4:SDIFF:求两个set的差集,以属于A而不属于B的元素为元素的集合成为A与B的差(集),即以第一个set的为基准对比第二个,且第一个set有的而第二个set没有的部分:
192.168.10.15:6379> SMEMBERS set1
1) "s4"
2) "s1"
3) "s3"
4) "s2"
192.168.10.15:6379> SMEMBERS set2
1) "s4"
2) "s3"
3) "s5"
4) "s1"
5) "s2"
127.0.0.1:6379> SDIFF set1 set2 # 若是第一个在前面就对比不到
(empty list or set)
127.0.0.1:6379> SDIFF set2 set1 # 第二个在前面就能够对出第二个的s5在第一个里面没有
1) "s5"
2.4.5:SINTER:返回集合的交集,属于A且属于B的元素为元素的集合成为A与B的交(集) ,即集合同时包含的数值:
127.0.0.1:6379> SMEMBERS set1
1) "s4"
2) "s3"
3) "s2"
4) "s1"
127.0.0.1:6379> SMEMBERS set4
1) "s2"
2) "s1"
3) "s4"
4) "s3"
5) "s5"
6) "s6"
127.0.0.1:6379> SINTER set1 set4 # 交集只保留双方都有的值
1) "s4"
2) "s3"
3) "s2"
4) "s1"
2.4.6:SUNION,返回集合的并集,属于A或属于B的元素为元素的集合成为A与B的并(集) ,每一个数据的保留一份,即自动去掉重复的:
127.0.0.1:6379> SUNION set1 set4
1) "s4"
2) "s3"
3) "s1" #在多个集合屡次出现的值只统计一次
4) "s5"
5) "s2"
6) "s6"
2.5:有序队列:经过给key设置分数保持值得index位置固定,集合是无序的:
2.5.1:ZADD 根据分数建立有序队列,ZSCORE获取到值的分数:
127.0.0.1:6379> ZADD number 1 a 2 b 3 c 4 d # 按照分数设置有序队列
(integer) 4
127.0.0.1:6379> ZSCORE number c # 获取值得分数
"3"
2.5.2: 根据值的分数排序获取值:
127.0.0.1:6379> ZRANGE number 0 -1 #0和-1为取值的下标范围,超出值队列的总长度并不报错
1) "a"
2) "b"
3) "c"
4) "d"
2.6:info 命令,查看redis服务器的运行状态:
127.0.0.1:6379> info # Server redis_version:3.2.9 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:3a11faa19c76ca1d redis_mode:standalone os:Linux 3.10.0-514.el7.x86_64 x86_64 arch_bits:64 multiplexing_api:epoll gcc_version:4.8.5 process_id:9164 run_id:4980c0e52073860e058750304f6ccddc28b19dd6 tcp_port:6379 uptime_in_seconds:12384 uptime_in_days:0 hz:10 lru_clock:6520647 executable:/usr/local/redis/src/redis-server config_file:/etc/redis/6379.conf # Clients connected_clients:1 client_longest_output_list:0 client_biggest_input_buf:0 blocked_clients:0 # Memory used_memory:824712 used_memory_human:805.38K used_memory_rss:8245248 used_memory_rss_human:7.86M used_memory_peak:824712 used_memory_peak_human:805.38K total_system_memory:3958329344 total_system_memory_human:3.69G used_memory_lua:37888 used_memory_lua_human:37.00K maxmemory:0 maxmemory_human:0B maxmemory_policy:noeviction mem_fragmentation_ratio:10.00 mem_allocator:jemalloc-4.0.3 # Persistence loading:0 rdb_changes_since_last_save:0 rdb_bgsave_in_progress:0 rdb_last_save_time:1499692781 rdb_last_bgsave_status:ok rdb_last_bgsave_time_sec:0 rdb_current_bgsave_time_sec:-1 aof_enabled:0 aof_rewrite_in_progress:0 aof_rewrite_scheduled:0 aof_last_rewrite_time_sec:-1 aof_current_rewrite_time_sec:-1 aof_last_bgrewrite_status:ok aof_last_write_status:ok # Stats total_connections_received:2 total_commands_processed:118 instantaneous_ops_per_sec:0 total_net_input_bytes:4240 total_net_output_bytes:12054709 instantaneous_input_kbps:0.00 instantaneous_output_kbps:0.00 rejected_connections:0 sync_full:0 sync_partial_ok:0 sync_partial_err:0 expired_keys:0 evicted_keys:0 keyspace_hits:50 keyspace_misses:0 pubsub_channels:0 pubsub_patterns:0 latest_fork_usec:111284 migrate_cached_sockets:0 # Replication role:master connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 # CPU used_cpu_sys:14.96 used_cpu_user:3.88 used_cpu_sys_children:0.57 used_cpu_user_children:0.00 # Cluster cluster_enabled:0 # Keyspace db0:keys=18,expires=0,avg_ttl=0
2.7:config命令,用于查看当前配置、在不重启服务器的状况下修改配置:
127.0.0.1:6379> CONFIG GET maxmemory 1) "maxmemory" 2) "0" 127.0.0.1:6379> CONFIG SET maxmemory 512000000 OK 127.0.0.1:6379> CONFIG GET maxmemory 1) "maxmemory" 2) "512000000"
2.8:select切换数据库,dbsize查看当前库的key数量:
127.0.0.1:6379> KEYS * 1) "key10" 2) "set1" 3) "phone" 4) "set4" 5) "list1" 6) "k2" 7) "num" 8) "number" 9) "l1" 10) "set2" 11) "key2" 12) "num2" 13) "num1" 14) "a" 15) "list2" 16) "k3" 17) "k1" 18) "set3" 127.0.0.1:6379> SELECT 0 #select用于在各库在之间进行切换 OK 127.0.0.1:6379> DBSIZE (integer) 18 127.0.0.1:6379> set name jack OK 127.0.0.1:6379> DBSIZE (integer) 19 # 当前有19个key 127.0.0.1:6379> keys * 1) "key10" 2) "set1" 3) "phone" 4) "set4" 5) "list1" 6) "k2" 7) "num" 8) "number" 9) "l1" 10) "set2" 11) "key2" 12) "num2" 13) "num1" 14) "a" 15) "list2" 16) "k3" 17) "k1" 18) "set3" 19) "name"