使用服务相关命令

启动redis服务

redis-server
redis-server &
redis-server redis.conf &

查看是否启动完成

ps -ef | grep redis

关闭redis服务

redis-cli shutdown 默认关闭连接127.0.0.1的6379端口
redis-cli shutdown -h ... -p ...

客户端连接redis服务端

redis-cli :默认连接127.0.0.1的6379端口
redis-cli -p 端口号:
redis-cli -h ip地址 -p 端口号:

关闭客户端

127.0.0.1:6379> exit 或者 quit

redis基本知识

//测试redis服务的性能
redis-benchmark(了解)  
//查看redis服务是否正常运行,正常运行会返回一个PONG
127.0.0.1:6379> ping 
//查看redis服务器的统计信息
127.0.0.1:6379> info
127.0.0.1:6379> info [信息段]   //查看redis服务器指定的统计信息
//切换数据库实例 ,默认为0
127.0.0.1:6379> select 编号
//查看当前数据库中所有key的数量
127.0.0.1:6379> dbsize
//查看当前数据库中所有的key
127.0.0.1:6379> key *
//清空数据库实例
127.0.0.1:6379> flushdb
//清空所有的数据库实例
127.0.0.1:6379> flushall (慎用)
//查看redis中所有的配置信息
127.0.0.1:6379> config get *

redis的五种数据结构

  1. 字符串--------string 单key : 单value
  2. list集合-------list 单key : 多有序value
  3. set集合-------set 单key : 多无序value
  4. pojo----------hash 单key : 对象(属性:值)
  5. 有序集合------zset 单key:多有序value(类似于java的treeset)

redis的操作命令

key

//查看数据库中的key 通配符*(匹配0个或多个字符) ?(匹配1个字符)[ ](匹配[]里的1个字符)
keys [pattern]
keys *        //查看数据库中所有的key
keys k*      //查看数据库中国所有以key开头的key

//判断key在数据库中是否存在 
exists [key]
exists k1   //返回1存在0不存在
exists [key,. . . ]
exists k1 k2 k3 k4   //返回存在的key的数量

//移动指定key到指定index数据库
move [key] [index]
move k 1

//查看指定key的剩余生存时间
ttl [key] //返回值-2则key不存在返回值-1则没有设置永不过期

//设置key的最大生存时间
expire [key] [seconds] //从设置开始计时,超过固定秒就被删除

//查看key的数据类型
type [key]

//重命名key
rename [key] [newkey]

//删除key
del [key]
del [key,. . . ] 返回实际删除的数量
del k1,k2,k3

string

//将string类型的数据设置到redis中,已存在会覆盖以前的数据
set [key] [value]
set zsname zhangsan

//获取string类型的数据
get [key]
get zsname

//追加字符串
append [key] [append_value] //返回追加之后的string长度,若key不存在会新创建一个key并把value设置为append_value
set phone 1389999
append phone 8888

//获取string数据的长度
strlen [key]
strlen phone //返回phone对应value的长度

//将字符串数值进行加1运算,要求value必须是数值,否则报错
incr [key] //返回加1运算之后的数据,若key不存在,首先设置value为0的key,然后加1

//减1运算
decr [key]

//加offset运算,返回运算后的数据
incrby [key] [offset]
incrby zsage 10

//减offset运算,返回运算后的数据
decrby [key] [offset]
decrby zsage 10

//截取字符串 正下标是从0开始到strlen-1 下标也可以是负数,最右是-1
getrange [key] [startIndex] [endIndex] //从startIndex截取到endIndex(包括endIndex)只是获取,不会影响数据库内容 

//截取字符串,改变数据库的内容,能覆盖几个字符就覆盖几个
setrange [key] [startIndex] [value] //用value覆盖从下标startIndex开始的字符串

//设置字符串的同时 指定最大生命周期
setex [key] [seconds] [value]

//设置数据,若存在不会覆盖以前的数据 与set相反
setnx [key] [value]

//批量设置
mset [k1] [v1] [k2] [v2] [k3] [v3] . . . . . .

//批量获取
mget [k1] [k2] [k3]. . . . . .

//批量设置 当所有key都不存在才会设置 有一个存在就全部放弃设置
msetnx [k1] [v1] [k2] [v2] [k3] [v3] . . . . . .

list

//将一个或多个值依次左插入列表的表头
lpush [key] value
lpush [key] [v1,v2,v3,. . .]
lpush zhangsan 1 20 北京 //此时列表是 [北京 20 1]

//将一个或多个值依次右插入列表的表尾
rpush [key] value
lpush [key] [v1,v2,v3,. . .]

//获取指定列表中指定列表区间的元素
lrange [key] [startIndex] [endIndex]

//从列表里移除并且返回表头元素
lpop [key]

//从列表里移除并且返回表尾元素
rpop [key]

//根据count值移除指定列表中跟value相等的数据
lrem [key] [count] [value] //count>0 从列表左侧删除count个value count<0 则从右侧;count=0 则删除所有个数

//获取指定列表中指定下标的元素
lindex [key] [index]

//获取指定列表的长度
llen [key]

set

//添加元素到集合 若已存在则忽略 返回成功加入的个数
sadd [key] [v1,v2,v3,. . .]

//获取集合中的元素
smembers [key]

//判断集合中是否存在某个元素member 存在返回1否则0
sismember [key] [member]

//获取集合的长度
scard [key]

//移除指定集合中一个或多个元素 返回成功移除的个数
srem [key] [m1,m2,m3,. . .]

//随机获取指定集合中的count个元素count为可选参数 count为正不会重复 count为负则会重复 
srandmember [key] [count]

//从集合中随机移除一个或多个元素
spop [key] [count]

//移动集合的一个元素到另一个集合
smove [key1] [key2] [member]

//集合运算
sdiff [key] [key1,key2,key3, . . .] //集合的差 获取key中有 其它集合没有的元素
sinter  [key1,key2,key3, . . .] //交集
sunion  [key1,key2,key3, . . .] //并集

hash

//将一个或多个field-value对设置到哈希表中 两种语法 存在会覆盖
hset [key] [field] [value] [field] [value] . . .
hmset [key] [field] [value] [field] [value] . . .

//存在不会覆盖
hsetnx [key] [field] 
//获取指定field的值
hget [key] [field]

//批量获取
hmget [key] [field] [field] . . .

//获取哈希表中所有field和value
hgetall [key]

//获取所有field
hkeys [key]

//获取所有value
hvals [key]

//从指定哈希表中删除一个或多个field
hdel [key] [field] [field] . . .

//获取指定哈希表中field的个数
hlen [key]

//判断哈希表中是否存在某个field
hexists [key] [field]

//对指定哈希表中某个field对应的value进行整数加法运算
hincrby [key] [field] [int]
//浮点数加法
hincrbyfloat [key] [field] [float]

z-set

//将一个或多个member及其score值加入有序集合
zadd [key] [score] [member] [score] [member]  . . .

//获取指定有序几个中指定下标区间的元素
zrange [key] [startIndex] [endIndex] 可选参数withscores

//获取指定score区间的元素
zrangebyscore [key] [min] [max] 可选withscores

//获取指定score区间的元素个数
zcount [key] [min] [max] 

//删除指定一个或多个元素
zrem [key] [member] [member]

//获取指定有序集合中所有元素的个数
zcard [key]

//获取指定有序集合中元素的下标 从0开始
zrank [key] [member]

//获取指定有序集合中元素的倒序排名 从大到小
zrevrank [key] [member]

//获取指定元素的score
zscore [key] [member]

redis.conf配置文件

网络相关配置

  1. bind 绑定ip地址,可通过此ip访问redis,默认127.0.0.1
  2. port 配置redis服务端口号 默认6379
  3. tcp-keepalive tcp连接保活策略

常规配置

  1. loglevel 日志级别
  2. logfile 日志文件
  3. database 配置redis服务默认创建的数据库实例个数,默认值16

安全配置

  1. requirepass 设置密码 在protected-mode=yes时起作用 通常不设置,影响效率

RDB配置

save [seconds] [changes]

AOF配置

appendonly 配置是否开启AOF策略
appendfilename 配置操作日志文件

redis持久化

RDB

RDB策略:在指定时间间隔内,redis服务执行指定次数的写操作,会自动触发一次持久化操作。

AOF

AOF策略:采用操作日志进行每一次写操作,就会立即将该条命令写到日志文件。开机时重新执行。效率低,默认不执行该策略。

redis的事务

Redis的事务:允许把一组redis命令放在一起,把命令进行序列化,然后一起执行,保证部分原子性
multi:事务开始标记
exec:事务结束标记

  1. redis的事务只能保证部分原子性
    1.1 如果一组命令中,有在压入事务队列过程中发生错误的命令,则本事务中所有命令都不执行
    1.2 如果一组命令中,在压入事务队列过程中没有错误,在执行时发生错误,则本事务中其它所有的命令都不会影响,只会影响发生错误的命令

discard:清除所有已经压入队列中的命令,并且结束事务
watch:监控某一个键,当事务在执行过程中,此键代码的值发生变化,则本事务放弃执行;否则正常执行
unwatch:放弃监控某一个键

消息的发布和订阅(了解)

redis客户端订阅某个频道,消息的发布者往频道上发布消息,所有订阅此频道的客户端都能接收到消息

  1. subscribe:
    subscribe ch1 ch2 ch3
  2. publish
    publish ch1 hello

redis的主从复制

主机数据更新后根据配置和策略,自动同步到从机。master/slave机制,master以写为主,slave以读为主。
主少从多,主写从读,读写分离,主写同步复制到从
slaveof [ip] [port]
slaveof no one

redis的哨兵模式

哨兵模式:主机宕机,从机上位的自动版本
./redis-sentinel sentinel.conf

Jedis操作Redis

  1. 加入jedis依赖
  2. 虚拟机关闭防火墙
Jedis j=new Jedis("127.0.0.1",6379);

更多推荐