redis的数据操作二

追求适度,才能走向成功;人在顶峰,迈步就是下坡;身在低谷,抬足既是登高;弦,绷得太紧会断;人,思虑过度会疯;水至清无鱼,人至真无友,山至高无树;适度,不是中庸,而是一种明智的生活态度。

导读:本篇文章讲解 redis的数据操作二,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

标题文本样式列表图片链接目录代码片表格注脚注释自定义列表LaTeX 数学公式插入甘特图插入UML图插入Mermaid流程图插入Flowchart流程图插入类图快捷键
标题复制

hash

前言

Redis hash 是一个 string 类型的 field 和 value 的映射表.它的添加、删除操作都是 O(1)(平均)。hash 特别适合用于存储对象。相较于将对象的每个字段存成单个 string 类型。将一个对象存储在 hash 类型中会占用更少的内存,并且可以更方便的存取整个对象。省内存的原因是新建一个 hash 对象时开始是用 zipmap(又称为 small hash)来存储的。这个 zipmap 其实并不是 hash table,但是 zipmap 相比正常的 hash 实现可以节省不少 hash 本身需要的一些元数据存储开销。尽管 zipmap 的添加,删除,查找都是 O(n),但是由于一般对象的 field 数量都不太多。所以使用 zipmap 也是很快的,也就是说添加删除平均还是 O(1)。如果 field 或者 value的大小超出一定限制后,Redis 会在内部自动将 zipmap 替换成正常的 hash 实现. 这个限制可以在配置文件中指定

hash-max-zipmap-entries 64 #配置字段最多 64 个
hash-max-zipmap-value 512 #配置 value 最大为 512 字节
**

hset hsetnx hmset hget and hmget

set mysh2 filed "chinese" 
(integer) 1
127.0.0.1:6379> hset mysh2 filed1 "math" 
(integer) 1
127.0.0.1:6379> hset mysh2 filed1 "english"
(integer) 0
127.0.0.1:6379> hget mysh file1
(nil)
127.0.0.1:6379> hget mysh filed1
(nil)
127.0.0.1:6379> hget mysh2 filed1
"english"
127.0.0.1:6379> hmget mysh2
(error) ERR wrong number of arguments for 'hmget' command
127.0.0.1:6379> hmget mysh2 filed
1) "chinese"
127.0.0.1:6379> hmget mysh2 filed filed1
1) "chinese"
2) "english"

hincrby hexists hlen hdel hkeys and hvals

hset mysh2 filed2 20
(integer) 1
127.0.0.1:6379> hincrby mysh filed2 9
(integer) 9
127.0.0.1:6379> hincrby mysh2 filed2 9
(integer) 29
127.0.0.1:6379> hexists mysh2 filed4
(integer) 0
127.0.0.1:6379> hlen mysh2
(integer) 3
127.0.0.1:6379> hdel mysh2   filed1
(integer) 1
127.0.0.1:6379> hkeys mysh2
1) "filed"
2) "filed2"
127.0.0.1:6379> hvals mysh2
1) "chinese"
2) "29"
127.0.0.1:6379> 

list

前言

list 是一个链表结构,主要功能是 push、pop、获取一个范围的所有值等等,操作中 key 理解为链表的名字。Redis 的 list 类型其实就是一个每个子元素都是 string 类型的双向链表。链表的最大长度是(2的 32 次方)。我们可以通过 push,pop 操作从链表的头部或者尾部添加删除元素。这使得 list既可以用作栈,也可以用作队列。有意思的是 list 的 pop 操作还有阻塞版本的,当我们[lr]pop 一个 list 对象时,如果 list 是空,或者不存在,会立即返回 nil。但是阻塞版本的 b[lr]pop 可以则可以阻塞,当然可以加超时时间,超时后也会返回 nil。为什么要阻塞版本的 pop 呢,主要是为了避免轮询。举个简单的例子如果我们用 list 来实现一个工作队列。执行任务的 thread 可以调用阻塞版本的 pop 去获取任务这样就可以避免轮询去检查是否有任务存在。当任务来时候工作线程可以立即返回,也可以避免轮询带来的延迟。说了这么多,接下来看一下实际操作的方法吧:

lpush rpush linsert and lset

lpush mylist3 kkkk
(integer) 1
127.0.0.1:6379> lpush mylist3 llll
(integer) 2
127.0.0.1:6379> lrange mylist3 0 -1
1) "llll"
2) "kkkk"
127.0.0.1:6379> rpush mylist kkkk
(integer) 4
127.0.0.1:6379> rpush mylist llll
(integer) 5
127.0.0.1:6379> lrange mylist3 0 -1
1) "llll"
2) "kkkk"
127.0.0.1:6379> linsert mylist before kkkk jjjj
(integer) 6
127.0.0.1:6379> lrange mylist3 0 -1
1) "llll"
2) "kkkk"
127.0.0.1:6379> linsert mylist3 before kkkk jjjj
(integer) 3
127.0.0.1:6379> lrange mylist3 0 -1
1) "llll"
2) "jjjj"
3) "kkkk"
127.0.0.1:6379> lset mylist3 2 nnnn
OK
127.0.0.1:6379> lrange mylist3 0 -1
1) "llll"
2) "jjjj"
3) "nnnn"

lrem ltrim lpop roop rpoplpush lindex and llen

127.0.0.1:6379> rpush mylist9    one
(integer) 1
127.0.0.1:6379> rpush mylist9    two
(integer) 2
127.0.0.1:6379> rpush mylist9    there
(integer) 3
127.0.0.1:6379> rpush mylist9    four
(integer) 4
127.0.0.1:6379> ltrim  mylist  1 -1
OK
127.0.0.1:6379> lrem mylist4 -1 hello
(integer) 1
127.0.0.1:6379> lrange mylist9 0 -1
1) "one"
2) "two"
3) "there"
4) "four"
127.0.0.1:6379> ltrim  mylist9  1 -1
OK
127.0.0.1:6379> lrange mylist9 0 -1
1) "two"
2) "there"
3) "four"
127.0.0.1:6379> rpoplush mylist9 mylist4
(error) ERR unknown command `rpoplush`, with args beginning with: `mylist9`, `mylist4`, 
127.0.0.1:6379> rpoplpush mylist9 mylist4
"four"
127.0.0.1:6379> lrange mylist9 0 -1
1) "two"
2) "there"

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/129736.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!