Redis笔记2

**

P13:String类型使用

**

127.0.0.1:6379> set key1 xs #设置值
OK
127.0.0.1:6379> get key1 #获取值
“xs”
127.0.0.1:6379> EXISTS key1 #判断是否存在
(integer) 1
127.0.0.1:6379> append key1 “fd” #追加字符串,如果key不存在就相当于新增
(integer) 4
127.0.0.1:6379> get key1
“xsfd”

#自增:
127.0.0.1:6379> incr views #自增1
(integer) 1
127.0.0.1:6379> incr views
(integer) 2
127.0.0.1:6379> get views
“2”
127.0.0.1:6379> decr views #自减1
(integer) 1
127.0.0.1:6379> decr views
(integer) 0
127.0.0.1:6379> incrby views 10 #设置自增步长(自减同理)
(integer) 8
127.0.0.1:6379> incrby views 10
(integer) 18

#字符串范围 range
127.0.0.1:6379> set key2 “hello,xs”
OK
127.0.0.1:6379> get key2
“hello,xs”
127.0.0.1:6379> GETRANGE key2 0 2 #截取字符串 0-2
“hel”
127.0.0.1:6379> GETRANGE key2 0 -1 #截取所有字符串(=get key)
“hello,xs”

#替换
127.0.0.1:6379> set key3 xsfd
OK
127.0.0.1:6379> SETRANGE key3 2 xs #替换从指定位置开始的字符串
(integer) 4
127.0.0.1:6379> get key3
“xsxs”

#设置过期时间

setex (set with expire) #设置过期时间
setnx (set if not exist) #不存在在设置(只能设置不存在的,在分布式中经常使用)

127.0.0.1:6379> setex key4 30 xs #设置key4 30秒过期
OK
127.0.0.1:6379> ttl key4 #还有25秒过期
(integer) 25
127.0.0.1:6379> ttl key4 #还有19秒过期
(integer) 19

127.0.0.1:6379> setnx key5 xusheng #如果key5不存在则创建
(integer) 1
127.0.0.1:6379> setnx key5 fengding #如果key5存在则失败
(integer) 0
127.0.0.1:6379> get key5
“xusheng”

#批量mset,mget
127.0.0.1:6379> mset key1 xs key2 fd key3 xy key4 pdh #设置多个值
OK
127.0.0.1:6379> keys *

  1. “key4”
  2. “key3”
  3. “key2”
  4. “key1”

127.0.0.1:6379> msetnx key2 nice key10 beef #msetnx 是一个原子性的操作,要么都成功要么都失败
(integer) 0

#对象
set user:1 {name:zhangsan,age:3} #设置一个user:1对象,值为json字符来保存一个对象

#这里的key是一个巧妙的设计: user:{id}:{field}作为key
127.0.0.1:6379> mset user:1:name zhangsan user:1:age 21
OK
127.0.0.1:6379> mget user:1:name user:1:age

  1. “zhangsan”
  2. “21”

#getset 先get后set

127.0.0.1:6379> getset bd bd1 #如果不存在则返回nil,但是会set进去
(nil)
127.0.0.1:6379> get bd
“bd1”
127.0.0.1:6379> getset bd db2 #如果存在会获取原来的值,并把新的set进去
“bd1”

String使用场景:
1.计数器
2.统计多单位的数量
3.粉丝数 incr uid:16115:follow 关注就增加1
4.对象缓存存储

**

P14 List类型的

**

所有的list命令都是以l开头的

127.0.0.1:6379> LPUSH list one #将一个或者多个值插入到列表头部(左)
(integer) 1
127.0.0.1:6379> LPUSH list two
(integer) 2
127.0.0.1:6379> LPUSH list three
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1 #获取list中值

  1. “three”
  2. “two”
  3. “one”
    127.0.0.1:6379> LRANGE list 0 1
  4. “three”
  5. “two”

127.0.0.1:6379> RPUSH list right #将一个或者多个值插入到列表尾部(右)
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1

  1. “three”
  2. “two”
  3. “one”
  4. “right”

#LPOP RPOP 左边移除和右边移除

#Lindex 获取list中某个下标的值
127.0.0.1:6379> LINDEX list 0
“three”

#Llen 获取list长度
127.0.0.1:6379> LLEN list
(integer) 4

#Lrem 移除指定值

127.0.0.1:6379> LRANGE list 0 -1

  1. “one”
  2. “one”
  3. “three”
  4. “two”
  5. “one”
  6. “right”
    127.0.0.1:6379> LREM list 1 one #移除1个list中值为one的值
    (integer) 1
    127.0.0.1:6379> LRANGE list 0 -1
  7. “one”
  8. “three”
  9. “two”
  10. “one”
  11. “right”
    127.0.0.1:6379> LREM list 2 one #移除2个list中值为one的值
    (integer) 2
    127.0.0.1:6379> LRANGE list 0 -1
  12. “three”
  13. “two”
  14. “right”

#Ltrim 通过下标截取指定长度
127.0.0.1:6379> LRANGE mylist 0 -1

  1. “hello”
  2. “hello1”
  3. “hello2”
  4. “hello3”
    127.0.0.1:6379> LTRIM mylist 0 1
    OK
    127.0.0.1:6379> LRANGE mylist 0 -1
  5. “hello”
  6. “hello1”

#rpoplpush #移除列表最后一个元素并放入新的列表
127.0.0.1:6379> LRANGE mylist 0 -1

  1. “hello”
  2. “hello1”
  3. “hello2”
    127.0.0.1:6379> rpoplpush mylist newlist
    “hello2”
    127.0.0.1:6379> LRANGE newlist 0 -1
  4. “hello2”
    127.0.0.1:6379> LRANGE mylist 0 -1
  5. “hello”
  6. “hello1”

#lset 将列表中指定下标的值替换为另一个值,更新操作
127.0.0.1:6379> LRANGE list 0 -1

  1. “xusheng”
    127.0.0.1:6379> lset list 0 fengding #0下标替换为fengding
    OK
    127.0.0.1:6379> LRANGE list 0 -1
  2. “fengding”
    127.0.0.1:6379> lset list 1 xusheng #如果这个下标不存在就会报错
    (error) ERR index out of range

#linsert 将某个具体的value插入到列表中某个元素的前面/后面
127.0.0.1:6379> LRANGE list 0 -1

  1. “xusheng”
  2. “fengding”
    127.0.0.1:6379> LINSERT list before fengding xihuan
    (integer) 3
    127.0.0.1:6379> LRANGE list 0 -1
  3. “xusheng”
  4. “xihuan”
  5. “fengding”
    127.0.0.1:6379> LINSERT list after fengding chibaba
    (integer) 4
    127.0.0.1:6379> LRANGE list 0 -1
  6. “xusheng”
  7. “xihuan”
  8. “fengding”
  9. “chibaba”

小结:
1.实际上是一个链表,before Node after, left right 都可以插入值
2.如果key不存在,创建新的链表
3.如果key存在,新增内容
4.如果移除了所有值,空链表,也代表不存在
5.在两边插入或者改动值,效率最高,在中间的元素效率会低一点。

作用:消息排队,消息队列(Lpush, Rpop),栈(Lpush,Lpop)

**

P15 Set

**

set中的值是不能重复的。

127.0.0.1:6379> sadd myset xusehng #插入值
(integer) 1
127.0.0.1:6379> sadd myset fengding #插入值
(integer) 1
127.0.0.1:6379> sadd myset hahaha #插入值
(integer) 1
127.0.0.1:6379> sadd myset xixi #插入值
(integer) 1
127.0.0.1:6379> SMEMBERS myset #查看set中所有元素

  1. “xusehng”
  2. “xixi”
  3. “hahaha”
  4. “fengding”
    127.0.0.1:6379> SISMEMBER myset xusheng #判断set中是否有xusheng元素
    (integer) 0
    127.0.0.1:6379> SISMEMBER myset dog
    (integer) 0
    127.0.0.1:6379> SISMEMBER myset xixi
    (integer) 1
    127.0.0.1:6379> scard myset #获取set集合中元素个数
    (integer) 4
    127.0.0.1:6379> SREM myset xusehng #移除set中指定元素
    (integer) 1
    127.0.0.1:6379> SRANDMEMBER myset 1 #随机抽取set中指定个数的元素
  5. “xixi”
    127.0.0.1:6379> SRANDMEMBER myset 1
  6. “fengding”
    127.0.0.1:6379> spop myset 1 #随机删除set集合中指定个数的元素
  7. “xixi”
    127.0.0.1:6379> SMOVE myset myset2 fengding #set中指定元素移动到另一个set中
    (integer) 1
    127.0.0.1:6379> SMEMBERS myset2
  8. “fengding”

微博。b站共同关注
数字集合类:
差集
交集
并集

127.0.0.1:6379> sadd key1 a
(integer) 1
127.0.0.1:6379> sadd key1 b
(integer) 1
127.0.0.1:6379> sadd key1 c
(integer) 1
127.0.0.1:6379> sadd key2 c
(integer) 1
127.0.0.1:6379> sadd key2 d
(integer) 1
127.0.0.1:6379> sadd key2 e
(integer) 1
127.0.0.1:6379> SDIFF key1 key2 #差集

  1. “a”
  2. “b”
    127.0.0.1:6379> SINTER key1 key2 #交集 共同好友就可以这样实现
  3. “c”
    127.0.0.1:6379> SUNION key1 key2 #并集
  4. “c”
  5. “b”
  6. “d”
  7. “e”
  8. “a”

**

P16 Hash

**
Map集合,key-map,这时候值是一个map集合,就相当于Sting里的值变为了一个key-value
127.0.0.1:6379> hset myhash field1 xusheng
(integer) 1
127.0.0.1:6379> hget myhash field1
“xusheng”
127.0.0.1:6379> hmset myhash field1 xusheng field2 fengding
127.0.0.1:6379> hmget myhash field1 field2

  1. “xusheng”
  2. “fengding”
    127.0.0.1:6379> hgetall myhash
  3. “field1”
  4. “xusheng”
  5. “field2”
  6. “fengding”

127.0.0.1:6379> HDEL myhash field1 #删除指定的key,对应的value也没了
(integer) 1
127.0.0.1:6379> hgetall myhash

  1. “field2”
  2. “fengding”

hlen:获取长度
127.0.0.1:6379> HLEN myhash
(integer) 1
127.0.0.1:6379> hset myhash name xusheng
(integer) 1
127.0.0.1:6379> HLEN myhash
(integer) 2

hexists:判断key是否存在
127.0.0.1:6379> HEXISTS myhash key
(integer) 0
127.0.0.1:6379> HEXISTS myhash name
(integer) 1
127.0.0.1:6379>

获取所有的key
获取所有的value
127.0.0.1:6379> hkeys myhash 获取key

  1. “field2”
  2. “name”
    127.0.0.1:6379> HVALS myhash 获取values
  3. “fengding”
  4. “xusheng”

incr
decr
127.0.0.1:6379> HINCRBY myhash count 3 #指定增量3
(integer) 4
127.0.0.1:6379> HINCRBY myhash count 3
(integer) 7
127.0.0.1:6379> hsetnx myhash test xuxu #非空创建成功
(integer) 1
127.0.0.1:6379> hsetnx myhash test xuxu #非空创建失败
(integer) 0

hash应用:
变更的数据,user:1作为key,里面存放name,age。。 适合对象的存储,而string适合字符串的存储

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值