Redis基本操作

最近工作可能要使用Redis,首先对Redis的基本操作有一个初步的了解吧,这里的基本操作主要是Redis-cli的命令,至于JavaAPI的操作后面再了解一下分享@@。。
首先,要知道Redis中默认有16个数据库,数据库名字为0-15,在Redis-cli初始化时默认使用0号数据库。
其次应当知道Redis是一种面向“键/值”对儿数据类型的内存数据库。
其中Redis的键只能是字符串,Redis的值支持多种数据类型:

  1. 字符串 string
  2. 哈希 hash
  3. 字符串 list
  4. 集合 set
  5. 有序集合 sorted set
  6. HyperLogLog结构

一、命令示例
1、string命令

127.0.0.1:6379> set hello world             #通过set命令设置值,也可覆盖原有值。mset可以同时设置多个
OK      
127.0.0.1:6379> get hello                   #通过get命令获取该键对应的值。mget可同时取出多个
"world"     
127.0.0.1:6379> append hello world          #该键已经存在,因此返回追加后Value的长度
(integer) 10
127.0.0.1:6379> strlen hello                    #返回键对应值的长度
(integer) 10
127.0.0.1:6379> exists hello                    #返回key是否存在,1代表存在,0代表不存在。
(integer) 1
127.0.0.1:6379> incr num                    #key值递增1,如果不存在,默认值0递增1,非数值会抛错
(integer) 1
127.0.0.1:6379> decr num                    #key值递减1
(integer) 0
127.0.0.1:6379> incrby num 5                    #key值增加指定值
(integer) 5 
127.0.0.1:6379> decrby num 5                #key值减少指定值
(integer) 0
127.0.0.1:6379> del num                     #删除已有键
(integer) 1

2、hash命令
hash类型的值存储了字段和字段值的映射,字段和字段值只能是字符串,不支持其他数据类型。

127.0.0.1:6379> hset homeset network www.sina.cn        #hset命令添加hash类型数据
(integer) 1
127.0.0.1:6379> hget homeset baidu                  #hget命令读取指定hash列表中key值
"www.baidu.com"
127.0.0.1:6379> hexists homeset baidu                   #判断键中属性是否存在
(integer) 1
127.0.0.1:6379> hincrby num incre 5                 #键值增加指定数值(hash类型中没有加一命令)
(integer) 6
127.0.0.1:6379> hdel num incre                      #删除hash列表中指定键值。
(integer) 1
127.0.0.1:6379> hkeys num                           #获取指定hash中所有键
1) "incre"
2) "dey"
3) "anoth"
127.0.0.1:6379> hvals num                           #获取指定hash中所有值
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> hlen num                            #获取指定hash数据中包含多少字段
(integer) 3

3、list命令
list是一个有序的字符串列表,列表内部实现使用双向列表(linked list)实现。
list还可以作为队列使用。

127.0.0.1:6379> lpush ab a                  
(integer) 1
127.0.0.1:6379> lpush ab b                      #list的左侧写入数据
(integer) 2
127.0.0.1:6379> rpush ab c                      #list的右侧写入数据    
(integer) 3
127.0.0.1:6379> lrange ab 0 -1                  #读取全部数据(下标为-1代表最大下标)
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> lindex ab 0                     #查看指定下标数据
"b"
127.0.0.1:6379> llen ab                         #获取list的长度
(integer) 3
127.0.0.1:6379> lset ab 1 d                     #修改指定下标的值
OK
127.0.0.1:6379> ltrim ab 0 1                        #截取,保留指定数据
OK
127.0.0.1:6379> rpoplpush ab de                 #将元素从一个列表转到另一个列表
"d"
127.0.0.1:6379> lrange de 0 -1
1) "d"
2) "DDD"
3) "BBB"
4) "AAA"
127.0.0.1:6379> lrange ab 0 -1
1) "b"

4、set命令
set集合中的元素都是不重复的,无序的

127.0.0.1:6379> sadd myset a                        #使用sadd添加set类型数据
(integer) 1

127.0.0.1:6379> smembers myset                  #读取指定set内的数据。
1) "b"
2) "a"
3) "z"
4) "d"
127.0.0.1:6379> srem myset b                    #member移除集合中的member元素。
(integer) 1
127.0.0.1:6379> sismember myset b               #指定的元素在集合中是否存在,存在返回1,否则返回0
(integer) 0
127.0.0.1:6379> sdiff myset yourset             #返回所有指定集合的差集
1) "a"
2) "d"
3) "z"
127.0.0.1:6379> sinter myset yourset                #返回所有指定集合的交集
1) "b"
127.0.0.1:6379> sunion myset yourset                #返回所有集合的并集
1) "2"
2) "b"
3) "a"
4) "d"
5) "1"
6) "z"
127.0.0.1:6379> scard myset                 #返回集合的长度
(integer) 4
127.0.0.1:6379> spop myset                  #从集合中随机取出一个元素并且删除
"b"

5、sorted set 命令
有序集合,在集合类型的基础上为集合中的每个元素都关联了一个分数,这样可以很方便的获得分数最高的N个元素(topN)。

127.0.0.1:6379> zadd sor 1 aa               #使用zadd来写入sorted set 数据(写入时需要为数据添加权值)
(integer) 1

127.0.0.1:6379> ZSCORE sor aa               #获取某个数据的权值。
"1"

127.0.0.1:6379> zrange sor 0 -1             #获取sort set 内的所有数据
1) "aa"
2) "bb"
3) "cc"
127.0.0.1:6379> zrevrange sor 0 2               #将数据倒置并输出下标在[0,2]中的值
1) "dd"
2) "cc"
3) "bb"
127.0.0.1:6379> zrangebyscore sor 0 100         #将数据按分数从低到高排序,后面的数字是两个分数,并非下标。
1) "aa"
2) "bb"
3) "cc"
4) "dd"
127.0.0.1:6379> zrem sor aa                 #删除指定内容
(integer) 1
127.0.0.1:6379> zincrby sor 11 bb               #指定元素的分值增加
"13"
127.0.0.1:6379> zcard sor                   #返回sorted set 的长度
(integer) 3
127.0.0.1:6379> zcount sor 0 100                #获取指定分数范围内的元素个数(闭区间)
(integer) 3

Redis HyperLogLog 是用来做基数统计的算法。
优点:在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。
缺点:因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。
但是个人还是对这个数据类型比较生疏。

最后还有一点,可能有的朋友会觉得sorted set和list略有相似:
相同点:

(1). 二者都是有序的
(2).二者都可以获得某一范围的元素
不同点:
(1).列表类型是通过双向链表实现的,获取靠近两端的数据速度极快,当列表中元素增多后,访问中间的数据速度会很慢,所以它比较适合很少访问中间元素的应用
(2).有序集合类型是使用散列表和跳跃表(skip list)实现的,所以即使读取位于中间部分的数据速度也很快
(3).列表中不能简单的调整某个元素的位置,但是有序集合可以(通过更改这个元素的分值)
(4).有序集合要比列表更加消耗内存

未完待续。。。。

Redis中文乱码问题
有限中文内容存储到Redis当中,在Redis-cli查看时可能显示的是一些看不懂的十六进制内容,完全看不懂啊,这。

[root@master ~]# redis-cli
127.0.0.1:6379> keys *
1) "\xe5\x8c\x97\xe4\xba\xac\xe5\xbe\xa1\xe5\xae\xab\xe5\xa0\x82\xe8\xbf\x9b\xe5\x87\xba\xe5\x8f\xa3\xe8\xb4\xb8\xe6\x98\x93\xe6\x9c\x89\xe9\x99\x90\xe5\x85\xac\xe5\x8f\xb8"
127.0.0.1:6379> exit

为了方便查看,其实是有解决方案的……^^,在登录Redis-cli时加选项 –raw

[root@master ~]# redis-cli  --raw
127.0.0.1:6379> keys *
北京御宫堂进出口贸易有限公司
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值