Redis常用方法
string
get key 获取key的值
set key v 设置key的值
del key 删除key(应用于所有类型)
incr key 将储存的值加上1
decr key 将储存的值减去1
incrby key amout 加上整数amount
decrby key amout 减去整数amount
incrbybyfloat key amout 加上浮点数amount字符串二进制
append key v 将值追加到key当前储存值的末尾
getrange key start end 获取下标start到end的字符串
setrange key offset v 将字符串看做二进制位串,并将位串中偏移量为offset的二进制位的值
getbit key offset 将字符串看做是二进制位串值为1的二进制位的数量,如果给定了可选的start偏移量和end偏移量,那么只对偏移量指定范围的二进制位进行统计
bitop operation dest-key key-name [key-name …] 对一个或多个二进制位串进行 并and,或 or,异或XOR,非NOT 在内的任意一种安位运算符操作(bitwise operation),并将计算的结果放到dest -key里面
list
rpush key [v…] 将一个或多个加入列表右端
lpush key [v…] 将一个或多个加入列表左端
rpop key 移除并返回最右端的元素
lpop key 移除并返回列表最左端的元素
lindex key size 返回下标(偏移量)为size的元素
lrange key start end 返回从start 到end的元素 包含start和end
ltrim key start end 只保留从start 到end的元素 包含start和end
hash
hmget hkey key… 获取多个值
hmset hkey key v… 为多个key设置值
hdel hkey key… 删除多个值并返回
hlen hkey 返回总数量
hexists hkey key 检查key是否存在在散列中
hkeys hkey 获取散列中所有key
hvals hkey 获取三列中所有值
hgetall hkey 获取散列
hincrby hkey key increment 为key的值上加上整数increment
hincrbyfloat hkey key increment 为key的值上加上浮点数increment
set
sadd key item … 添加多个,返回新添加的个数(已存在的不算)
srem key item… 从集合移除多个元素 ,返回被移除元素的数量
sismember key item 检查元素item是否在集合中
scard key 返回集合总数
smembers key 返回所有元素
srandmember key cout 随机返回cout个元素 cout为正整数 随机元素不重复 相反可能会出现重复
spop key 随机的移除一个元素 并返回已删除的元素
smove key1 key2 item 如果key1中包含item 移除key1中的item 添加到key2中,成功返回1 失败返回0
差运算 sdiffstore newkey key key1… 将存在于key集合但是不存在key1…集合的其他元素 放到newkey里面(咬掉一口剩下的)
交运算 sinter key… 返回所有集合的交集(返回我们都有的的)
交运算 sinterstore newkey key… 返回多个集合的交集生成集合newkey
并运算 sunion key… (返回我们不重复的所有元素 )
并运算 sunion newkey key… 结果放到newkey中
zset
zadd key score member … 添加多个
zerm key memer… 移除多个
zcard key 返回所有成员
zincrby key incremnet member 将member成员的分值加上increment
zcount key min max 返回分值在 min和max中间的排名
zrank key member 返回成员member在集合中的排名
zscore key member 返回member的分值
zrange key start stop 返回 介于两者之间的成员
GEO
#设置经纬
127.0.0.1:6379> GEOADD China:city 116.40 39.90 beijing (integer) 1 127.0.0.1:6379> GEOADD China:city 121.47 31.23 shanghai (integer) 1 127.0.0.1:6379> GEOADD China:city 106.50 29.53 chongqin (integer) 1 127.0.0.1:6379> GEOADD China:city 114.08 22.54 shenzhen 113.28 23.12 guangzhou (integer) 2 127.0.0.1:6379> keys * 1) "China:city" 127.0.0.1:6379> get China:city (error) WRONGTYPE Operation against a key holding the wrong kind of value
#获得城市经纬 127.0.0.1:6379> GEOPOS China:city beijing 1) 1) "116.39999896287918091" 2) "39.90000009167092543" 127.0.0.1:6379> GEOPOS China:city chongqin 1) 1) "106.49999767541885376" 2) "29.52999957900659211"
#查询城市距离
127.0.0.1:6379> GEODIST China:city beijing shanghai
"1067378.7564"
#查询距离附带距离单位
127.0.0.1:6379> GEODIST China:city beijing shanghai km
"1067.3788"
127.0.0.1:6379> GEODIST China:city beijing chongqin m
"1464070.8051"
#以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
127.0.0.1:6379> GEORADIUS China:city 110 30 1000 km
1) "chongqin"
2) "shenzhen"
3) "guangzhou"
#附带经纬
127.0.0.1:6379> GEORADIUS China:city 110 30 1000 km withcoord
1) 1) "chongqin"
2) 1) "106.49999767541885376"
2) "29.52999957900659211"
2) 1) "shenzhen"
2) 1) "114.08000081777572632"
2) "22.53999903789756587"
3) 1) "guangzhou"
2) 1) "113.27999979257583618"
2) "23.1199990030198208"
#限制查询数量
127.0.0.1:6379> GEORADIUS China:city 110 30 1000 km withcoord count 1
1) 1) "chongqin"
2) 1) "106.49999767541885376"
2) "29.52999957900659211"
#查询到中心点的距离
127.0.0.1:6379> GEORADIUS China:city 110 30 1000 km WITHDIST
1) 1) "chongqin"
2) "341.9374"
2) 1) "shenzhen"
2) "923.9364"
3) 1) "guangzhou"
2) "831.7713"
#找出位于指定元素周围的其他元素(一般用于查找城市)
127.0.0.1:6379> GEORADIUSBYMEMBER China:city beijing 1000 km
1) "beijing"
#该命令将返回11个字符的Geohash字符串,将二维的经纬转化为一维的字符串
127.0.0.1:6379> GEOHASH China:city beijing chongqin
1) "wx4fbxxfke0"
2) "wm5xzrybty0"
127.0.0.1:6379> ZRANGE China:city 0 -1
1) "chongqin"
2) "shenzhen"
3) "guangzhou"
4) "shanghai"
5) "beijing"
127.0.0.1:6379> ZREM China:city beijing
(integer) 1
127.0.0.1:6379> ZRANGE China:city 0 -1
1) "chongqin"
2) "shenzhen"
3) "guangzhou"
4) "shanghai"
HyperLogLog
#统计基数算法,占用磁盘空间少,但有0.81%的概率出错,如果允许出错,可以使用HyperLoglog #如果不允许出错,就使用set或者自己的数据类型 #创建两组元素 127.0.0.1:6379> PFADD mykey a b c d e f g (integer) 1 127.0.0.1:6379> PFADD mykey2 h i j k a b c (integer) 1 127.0.0.1:6379> PFCOUNT mykey (integer) 7 127.0.0.1:6379> PFCOUNT mykey2 (integer) 7 #合并元素,去重 127.0.0.1:6379> PFMERGE mykey2 mykey mykey2 OK #查看并集数量 127.0.0.1:6379> PFCOUNT mykey2 (integer) 11 127.0.0.1:6379> get mykey2 "HYLLx01x00x00x00x0bx00x00x00x00x00x00x00Fmx80Ixe8x80L"x80D<x848x80B=x80Kx83x80Bxedx84Axfcx8cGx8ex80Bmx80BZ"
bitmaps 位图算法,一般适用于状态判断的场景,方便快捷且节省磁盘空间
127.0.0.1:6379> SETBIT sign 0 1 (integer) 0 127.0.0.1:6379> GETBIT sign 0 (integer) 1 127.0.0.1:6379> SETBIT sign 1 1 (integer) 0 127.0.0.1:6379> GETBIT sign 1 (integer) 1 127.0.0.1:6379> SETBIT sign 2 0 (integer) 0 127.0.0.1:6379> GETBIT sign 2 (integer) 0 127.0.0.1:6379> BITCOUNT sign (integer) 2 127.0.0.1:6379>
Redis集群配置
主从数据库配置,常规一主二从
1:cp redis.conf redis6379.conf cp redis.conf redis6380.conf cp redis.conf redis6381.conf
2:修改相应的redis63XX.conf配置文件参数,配从不配主
(端口,后台运行,pid名称,日志级别,日志文件名,dump.rdb名称)
如:port 6380,port 6381
daemonize yes
pidfile /usr/local/redis-6.0.5/redis6380.pid
loglevel notice
logfile "6380.log"
dbfilename "dump6380.rdb"
3:启动服务
sh-3.2# pwd /Users/yusuwu sh-3.2# cd /usr/local/etc/ sh-3.2# redis-server redis6380.conf sh-3.2# redis-cli -p 6380 127.0.0.1:6380> info replication # Replication role:master connected_slaves:0 master_replid:b83f2b3ed1c303bf2f2e6b75da2b0ae351e36efc master_replid2:0000000000000000000000000000000000000000 master_repl_offset:0 second_repl_offset:-1 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 127.0.0.1:6380> SLAVEOF 127.0.0.1 6379 OK 127.0.0.1:6380> info replication # Replication role:slave master_host:127.0.0.1 master_port:6379 master_link_status:up master_last_io_seconds_ago:5 master_sync_in_progress:0 slave_repl_offset:0 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:89c6a0b4e2544c931ce702b63aa45175532ea2e6 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:0 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:0
6379启动默认为主机,将6380,6381设置为从机,
#设置回主机
127.0.0.1:6380> SLAVEOF no one
OK
127.0.0.1:6380> info replication
# Replication
role:master
connected_slaves:0
master_replid:cddfb24b87742c871ccbdaa733e1cf5e4396966d
master_replid2:89c6a0b4e2544c931ce702b63aa45175532ea2e6
master_repl_offset:1792
second_repl_offset:1793
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1792
127.0.0.1:6380>
以上为命令操作,是暂时的,在实际开发中是在redis.conf配置文件中配置
replicaof <masterip> <masterport>
masterauth <master-password>
masteruser <username>
哨兵模式配置
哨兵模式是一种特殊的模式,需要独立的进程。
配置哨兵
touch sentinel.conf
vim sentinel.conf
sentinel monitor myredis 127.0.0.1 6379 1 #sentinel monitor 主机名 host port 1
后面的数字,代表主机挂了,slave投票决定谁担任主机,票数最多的为主机。
启动哨兵
redis-sentinel /uer/local/redis-6.0.5/sentinel.conf
注:这里只是粗略的设置,实际应用中会更详细。