redis五种基本数据类型及三种特殊数据类型命令 及 事务、安全、集群、哨兵模式

redis 五种常用数据类型 及三种 特殊类型

String

set name 1   #设置name为1
incr name     # 自增1
incrby name  5 # 自增 5
decr name #自减1
decrby name 5 #自减5
strlen name #字符长度
append name  123 # 追加 123
flushdb  #清空当前数据库
getrange name 0 3 #获取name中[0,3]
getrange name 0 -1 #获取name中的所有值
setrange name 1 XX #设置name从下标1位置开始修改为XX
setex name 50 value # 设置name 过期时间 50秒
setnx name value #若不存在name 在将name的值设置为value
mset name vulue name value...#同时设置多个值
mget name1 name2.. #同时获取多个值
msetnx name value name1 value #msetnx 是一个原子性的操作。
mset user:1:name jsj user:1:age 5 #设置user对象id为1的name和age
getset db redis #先get后set

List集合

lpush list 1 #向list集合新增值 (从尾部开始加1)
rpush list -1 #从开始的位置加 -1
lrange list 0 -1 #查看list全部值
lpop list  #移除list的第一个元素
rpop list #移除list的最后一个元素
lindex list 1 #返回list的第一个值
llen list #返回list的第一个值
lrem list 1 name #移除list中 1 个name的值
ltrim list 1 2 #通过下标截取指定的长度,这个list支撑下截取的元素了
rpoplpush list mylist #移除list集合中最后一个元素到mylist集合中
lset mylist 1 ni #将mylist集合 下标为1的值改为 ni
linsert mylist before 3 0 #在mylist集合中

set 集合

sadd  myset value #向set中添加元素
smembers myset #查看myset中的所有元素
sismember myset hellp #判断某一个元素是否在set中
scard myset #获取set中元素的个数
srem myset hello  #移除set中的指定元素 
srandmember myset #随机返回set中的一个元素
spop myset #随机移除set中一个元素
smove myset myset2 hello #将myset集合中的hello移动到myset2集合中
sdiff set1 set2 #返回set1和set2中不同的元素(差集)
sinter set1 set2 #返回set1和set2中相同的元素(交集)
sunion set1 set2 #返回set1和set2中全部不重复的元素(并集)

Hash 哈希

Map集合  格式:key-Map集合!
hash常用于一些对象 比如 user   name 、age
hset myhash name lili

hset myhash age 25

hset mehash name lihua

hset mehash age 15

hget myhash name

hget mehash name

hget myhash age

hget mehash age

hmset myhash sax 1 height 1.65   批量设置值

hmget myhash name age  批量获取值

hgetall myhash 获取一个myhash 里面的所有hash值

hdel myhash sax 删除myhash中指定的key

hlen myhash  myhash的长度 

hexists myhash sax 判断myhash 中是否存在 sax键

127.0.0.1:6379> hkeys myhash 获取myhash中所有的key
1) "name"
2) "age"
3) "height"
4) "sax"
5) "weight"
127.0.0.1:6379> hvals myhash 获取myhash中所有的values

hincrby myhash weight 1  设置hash对应key自增1

hsetnx myhash weight 25 hash不存在key则设置,存在则不做处理

Zset(有序集合)

在set的基础上,增加了一个值。zset k1 score value

 zadd myzset 1 jiang  添加一个值
zrange myzset 0 -1   获取所有的值
127.0.0.1:6379> zadd salary 2000 xiaoming   #设置值
(integer) 1
127.0.0.1:6379> zadd salary 2500 xiaohua
(integer) 1
127.0.0.1:6379> zadd salary 5000 lihua
(integer) 1
127.0.0.1:6379> zrangebyscore salary -inf +inf  #排序 增序
1) "xiaoming"
2) "xiaohua"
3) "lihua"

 zrevrangebyscore salary +inf -inf withscores  # 降序
1) "lihua"
2) "5000"
3) "xiaohua"
4) "2500"
5) "xiaoming"
6) "2000"

127.0.0.1:6379> zrange salary 0 -1  #查看元素
1) "xiaoming"
2) "xiaohua"
3) "lihua"

127.0.0.1:6379> zrem salary xiaohua  #移除指定元素
(integer) 1

127.0.0.1:6379> zrange salary 0 -1
1) "xiaoming"
2) "lihua"

127.0.0.1:6379> zcard salary  # 获取有序zset的长度
(integer) 2

 zrevrange salary 0 -1  # 降序
1) "lihua"
2) "xiaoming"

127.0.0.1:6379> zcount salary 2000 4000  #插区间的值
(integer) 1

geospatial 地理位置

geoadd china:city 113.88 22.55 shenzhen 120.21 30.20 hangzhou #添加城市路径
127.0.0.1:6379> geopos china:city beijing shanghai  # 获取城市经纬度
1) 1) "116.39999896287918091"
   2) "39.90000009167092543"
2) 1) "121.48000091314315796"
   2) "31.40000025319353938"
127.0.0.1:6379> geodist china:city chongqing xian # 两地之间的距离
"583091.4601"
127.0.0.1:6379> geodist china:city chongqing xian km
"583.0915"
127.0.0.1:6379> georadius china:city 106 29 5000 km withcoord count 1 # 以经纬度为 10629 为中心周围5000km 的数据取一个
1) 1) "chongqing"
   2) 1) "106.54000014066696167"
      2) "29.39999880018641676"
127.0.0.1:6379> georadius china:city 106 29 5000 km withcoord count 2 # 以经纬度为 10629 为中心周围5000km 的数据取两个
1) 1) "chongqing"
   2) 1) "106.54000014066696167"
      2) "29.39999880018641676"
2) 1) "xian"
   2) 1) "108.93999785184860229"
      2) "34.23000121926852302"
127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 3000 km withdist  # 已北京为中心 方圆3000km的城市。
1) 1) "chongqing"
   2) "1473.6565"
2) 1) "xian"
   2) "913.7303"
3) 1) "shenzhen"
   2) "1944.3652"
4) 1) "wuhan"
   2) "1058.8131"
5) 1) "hangzhou"
   2) "1132.9792"
6) 1) "shanghai"
   2) "1050.5249"
7) 1) "beijing"
   2) "0.0000"

GEO 底层实现原理其实是 Zset!
127.0.0.1:6379> ZRANGE china:city 0 -1 # 查找地理位置中的城市名
1) "chongqing"
2) "xian"
3) "shenzhen"
4) "wuhan"
5) "hangzhou"
6) "shanghai"
7) "beijing"
127.0.0.1:6379> ZREM china:city beijing #  删除地理位置中的城市名
(integer) 1

Hyperloglog 数据结构 (基数统计的算法)

基数:不重复的元素个数  应用:网站的访问人数:一个人多次访问只算一个
127.0.0.1:6379> PFADD maykey a  b c d e f g h i j k l m # 添加元素 
(integer) 1
127.0.0.1:6379> PFCOUNT maykey
(integer) 13
127.0.0.1:6379> PFADD mykey c d e f j h n o p q r s t # 添加元素 
(integer) 1
127.0.0.1:6379> PFCOUNT mykey  # 查看mykey 中元素的基数数量
(integer) 13
127.0.0.1:6379> PFMERGE mykeyon maykey mykey # maykey 和 mykey的并集的个数。
OK
127.0.0.1:6379> PFCOUNT mykeyon
(integer) 19

Bitmap 位存储 (位图 数据结构)

应用 统计用户信息 , 活跃,不活跃,登录,未登录。打卡状态。
两个状态的,都可以使用 Bitmaps!

# 一周的打卡情况:
127.0.0.1:6379> SETBIT ka 1 0
(integer) 0
127.0.0.1:6379> setbit ka 2 0
(integer) 0
127.0.0.1:6379> setbit ka 3 1
(integer) 0
127.0.0.1:6379> setbit ka 4 1
(integer) 0
127.0.0.1:6379> setbit ka 5 1
(integer) 0
127.0.0.1:6379> setbit ka 6 1
(integer) 0
127.0.0.1:6379> setbit ka 7 0
(integer) 0
127.0.0.1:6379> getbit ka 6
(integer) 1 
127.0.0.1:6379> getbit ka 7
(integer) 0
127.0.0.1:6379> BITCOUNT ka  # 获取 为 1的个数
(integer) 4

事务

  • 开启事务 multi
  • 执行命令
  • 执行事务 exec
  • 取消事务 discard
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> getset k2
(error) ERR wrong number of arguments for 'getset' command
127.0.0.1:6379> exec
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> get k2
(nil)

#redis 事务编译性错误 会保持原子性

127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> incr k1
QUEUED
127.0.0.1:6379> set k2 k2
QUEUED
127.0.0.1:6379> set k3 v3
QUEUED
127.0.0.1:6379> exec
1) (error) ERR value is not an integer or out of range
2) OK
3) OK

redis 事务运行时错误 不会保持原子性。

waich money 乐观锁 (开启乐观锁)
multi 开启事务
----- 操作命令
exec 执行事务
unwatch 如果发现事务执行失败,就先解锁

127.0.0.1:6379> set money 100
OK
127.0.0.1:6379> set out 0
OK
127.0.0.1:6379> watch money
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> decrby money 10
QUEUED
127.0.0.1:6379> incrby out 10
QUEUED
127.0.0.1:6379> exec    -- 期间另外一个客户端修改了 money的值 导致事务执行失败(乐观锁)
(nil)   

连接外网首先有在redis.conf改几个设置
1.daemonize yes
2.注释 bind 127.0.0.1
3.protected-mode no
其次看一下自己防火墙对端口号开没开放
firewall-cmd --query-port=6379/tcp
如果是yes就是开放的
然后重启生效。
然后 redis-server lconfig/redis.conf
redis-cli -h 自己外网ip号 -p 6379
最后ping一下如果pong就成功了

security 安全

设置密码命令:config set requirepass "123456"   #设置redis登录密码

登录命令 >  auth 123456 

集群

info replication  #查看当前库的信息
127.0.0.1:6379> info replication
# Replication
role:master    # 角色 master 主机
connected_slaves:0   #没有从机
master_replid:824d1be6f966bac0783f4651d73a8b197f824b0e
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
  • slaveof 主机ip 端口 #做哪个redis的从机
  • slaveof no one #做主机

哨兵模式

  1. 配置哨兵配置文件
 sentinel monitor 监控名称 host post  至少几个哨兵认为主机(宕机)死掉,进行选举
 sentinel monitor myredis 127.0.0.1 6379 1  至少一个哨兵认为主机(宕机)死掉,进行选举
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值