redis基础概念和常用命令
·
使用服务相关命令
启动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的五种数据结构
- 字符串--------string 单key : 单value
- list集合-------list 单key : 多有序value
- set集合-------set 单key : 多无序value
- pojo----------hash 单key : 对象(属性:值)
- 有序集合------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配置文件
网络相关配置
- bind 绑定ip地址,可通过此ip访问redis,默认127.0.0.1
- port 配置redis服务端口号 默认6379
- tcp-keepalive tcp连接保活策略
常规配置
- loglevel 日志级别
- logfile 日志文件
- database 配置redis服务默认创建的数据库实例个数,默认值16
安全配置
- requirepass 设置密码 在protected-mode=yes时起作用 通常不设置,影响效率
RDB配置
save [seconds] [changes]
AOF配置
appendonly 配置是否开启AOF策略
appendfilename 配置操作日志文件
redis持久化
RDB
RDB策略:在指定时间间隔内,redis服务执行指定次数的写操作,会自动触发一次持久化操作。
AOF
AOF策略:采用操作日志进行每一次写操作,就会立即将该条命令写到日志文件。开机时重新执行。效率低,默认不执行该策略。
redis的事务
Redis的事务:允许把一组redis命令放在一起,把命令进行序列化,然后一起执行,保证部分原子性
multi:事务开始标记
exec:事务结束标记
- redis的事务只能保证部分原子性
1.1 如果一组命令中,有在压入事务队列过程中发生错误的命令,则本事务中所有命令都不执行
1.2 如果一组命令中,在压入事务队列过程中没有错误,在执行时发生错误,则本事务中其它所有的命令都不会影响,只会影响发生错误的命令
discard:清除所有已经压入队列中的命令,并且结束事务
watch:监控某一个键,当事务在执行过程中,此键代码的值发生变化,则本事务放弃执行;否则正常执行
unwatch:放弃监控某一个键
消息的发布和订阅(了解)
redis客户端订阅某个频道,消息的发布者往频道上发布消息,所有订阅此频道的客户端都能接收到消息
- subscribe:
subscribe ch1 ch2 ch3 - publish
publish ch1 hello
redis的主从复制
主机数据更新后根据配置和策略,自动同步到从机。master/slave机制,master以写为主,slave以读为主。
主少从多,主写从读,读写分离,主写同步复制到从
slaveof [ip] [port]
slaveof no one
redis的哨兵模式
哨兵模式:主机宕机,从机上位的自动版本
./redis-sentinel sentinel.conf
Jedis操作Redis
- 加入jedis依赖
- 虚拟机关闭防火墙
Jedis j=new Jedis("127.0.0.1",6379);
更多推荐


所有评论(0)